Jakie są ograniczenia dotyczące nazw metod w Rubim?
Na przykład znalazłem nazwę metody
bundler?w poniższym fragmencie kodu i nie wiem, czy znak
?jest wyspecjalizowanym słowem kluczowym, czy tylko częścią nazwy metody .
# This is a predicate useful for the doc:guides task of applications.
def bundler?
# Note that rake sets the cwd to the one that contains the Rakefile
# being executed.
File.exists?('Gemfile')
end
Nie znaleziono powiązanych wyników
Zaproszony:
Aby odpowiedzieć na pytania, Zaloguj się lub Zarejestruj się
5 odpowiedzi
Anonimowy użytkownik
Potwierdzenie od:
Nazwa metody nie może zaczynać się od liczby, a znaki , i mogą pojawiać się tylko na końcu.
W nazwie metody można używać znaków spoza zestawu ASCII, ale może to prowadzić do bardzo zagmatwanych sytuacji i nie powinno być powszechną praktyką.
Jest to dobra praktyka, choć nie wiązanie, aby rozpocząć nazwę metody z symbolu linii, ponieważ nazwy, które zaczynają się od wielkich liter, są stałe w Ruby. Nadal możesz używać stałej nazwy metody, ale nie będziesz mógł nazwać go bez nawiasów, ponieważ Interptterer wyszuka nazwę jako stałą:
Niektóre bardzo szeroko i konsekwentnie używane
umowy
podczas definiowania nazw metod:
Array # [] =
, ...); - sugeruje interpreter języka Ruby cukier syntaktyczny aby wywołać metody ustawiające:Ruby umożliwia także definiowanie operatorów przy użyciu symbolu operatora jako nazwy metody:
Metody operatora jednoargumentowego nie przekazują żadnych argumentów; metody operatorów binarnych przekazują argument i działają na nim oraz na .
Ważne jest, aby ściśle przestrzegać arsenału operatorów; podczas gdy możliwe jest zdefiniowanie metod operatora o różnej wartości (na przykład metoda , która przyjmuje dwa argumenty), Ruby nie pozwoli ci wywołać metody ze składnią operatora (będzie jednak działać ze składnią kropkową).
Dobrą praktyką jest jak najbardziej trzymać się oryginalnej semantyki operatora: powinna być intuicyjna dla kogoś, kto zna oryginalne znaczenie operatora, jak to działa z niestandardowymi klasami.
Język oferuje również cukier syntaktyczny dla
Specjalny
, Metoda inna-ooe [] , która jest zwykle używana do dostępu do wartości tablicy i hasha. Metoda
[]
można określić za pomocą dowolnej arrości.Dla każdego operatora binarnego w tabeli, oprócz porządkowania, równości, porównania i dopasowywania wzorców, Ruby oferuje także skrócone przypisanie (na przykład rozwija się do ); nie możesz zdefiniować ich jako metod, ale możesz zmienić ich zachowanie, definiując operatory, na których są oparte.
Żaden z tych znaków nie może być używany w normalnych nazwach metod (na przykład lub nie są prawidłowymi nazwami metod).
Anonimowy użytkownik
Potwierdzenie od:
Ten fakt może być przydatny: na przykład
,
http://api.rubyonrails.org/cla ... -test
Metoda ActiveSupport :: Testing :: Declarative.test Railsów używa jej, aby uniknąć wykonywania złożonych konwersji do:
do bardziej solidnej nazwy, która może kolidować z innym testem o nazwie:
Jest to określone w
przewodnik po testach
http://guides.rubyonrails.org/ ... odels
.
Ciekawostka: Podobna rzecz dzieje się w Javie, gdzie nazwa metody kodu bajtowego daje znacznie większy wybór niż język Java:
Dlaczego maszyna JVM pozwala nam nazwać funkcję, która zaczyna się od cyfry w kodzie bajtowym?
https://coderoad.ru/26791204/
Anonimowy użytkownik
Potwierdzenie od:
[]
), które możesz zdefiniować dla własnych klas.Anonimowy użytkownik
Potwierdzenie od:
bez imienia
i spróbuje wywołać metodę o nazwie :
W rzeczywistości nie ma metody o nazwie zdefiniowane na , ale jest jeden na klasach i .
W niektórych językach jest instrukcją wywołania funkcji i jest bardzo podobna do tego, co się tutaj dzieje.
Jest to używane na przykład w JBuilderze Railsów:
https://github.com/rails/jbuilder
https://github.com/rails/jbuilder
Jest to udokumentowane na stronie 196 książki O'Reilly Ruby:
Ruby 1.9 oferuje dodatkowy sposób wywoływania obiektu ; zamiast nawiasów kwadratowych możesz użyć nawiasów z prefiksem kropki:
wygląda jak wywołanie metody, w której brakuje nazwy metody. Nie jest to instrukcja, którą można zdefiniować, ale raczej cukier składniowy, który wywołuje metodę . Może być używany z dowolnym obiektem, który definiuje metodę i nie jest ograniczony do obiektów .
Anonimowy użytkownik
Potwierdzenie od: