klassjest powszechnie używany do nazwania zmiennej, która przechowuje Classobiekt (pamiętaj, że klasy też są obiektami), tak jak w klass = String. Czy możesz podać źródło, w którym go widziałeś, aby uzyskać głębsze wyjaśnienie?
Chubas
5
Nie, nie chcę podawać jednego źródła, ponieważ nie chcę, aby zostało to wyjaśnione w ten sposób. Chcę mieć większy obraz na ten temat
thenengah
5
Czasami ludzie używają clazzzamiast klass(na przykład w książce „Metaprogramowanie języka Ruby”).
Andrew Grimm
2
W TV Tropes będzie to nazywane „Xtreme Kool Letterz” (brak połączenia - brak bezpieczeństwa produktywności).
Andrew Grimm,
Odpowiedzi:
188
classto słowo kluczowe używane do definiowania nowej klasy. Ponieważ jest to zarezerwowane słowo kluczowe, nie możesz go użyć jako nazwy zmiennej. Nie możesz używać słów kluczowych Rubiego jako nazw zmiennych, więc nie będziesz mógł mieć zmiennych o nazwach deflub modulelub iflub end, itd. - classnie jest inaczej.
Na przykład rozważ następujące kwestie:
def show_methods(class)
puts Object.const_get(class).methods.inspect
end
show_methods "Kernel"
Próba uruchomienia tego skutkuje błędem, ponieważ nie możesz użyć classjako nazwy zmiennej.
Aby to naprawić, użyjemy klasszamiast tego identyfikatora . Nie jest wyjątkowa, ale jest konwencjonalnie używana jako nazwa zmiennej, gdy masz do czynienia z klasą lub nazwą klasy. Fonetycznie jest to samo, ale ponieważ nie jest to zastrzeżone słowo kluczowe, Ruby nie ma z nim żadnych problemów.
def show_methods(klass)
puts Object.const_get(klass).methods.inspect
end
show_methods "Kernel"
Możesz użyć dowolnej (niezarezerwowanej) nazwy zmiennej, ale społeczność zaczęła używać klass. Nie ma żadnej specjalnej magii - oznacza po prostu „Chciałem użyć tutaj nazwy„ klasa ”, ale nie mogę, ponieważ jest to zastrzeżone słowo kluczowe”.
Na marginesie, ponieważ kilka razy wpisałeś go nieprawidłowo, warto zauważyć, że w Rubim sprawa ma znaczenie. Tokeny zaczynające się wielką literą to stałe. Za pomocą kilofa :
Stała nazwa zaczyna się od dużej litery, po której następują znaki nazwy. Nazwy klas i nazwy modułów są stałymi i są zgodne ze stałą konwencją nazewnictwa. Zgodnie z konwencją, stałe zmienne są zwykle zapisywane przy użyciu wielkich liter i znaków podkreślenia.
Zatem prawidłowa pisownia to classi klass, a nie Classi Klass. To ostatnie byłoby stałe i oba Classi Klasssą ważne nazwy stałych, ale polecam przed wykorzystaniem ich do celów przejrzystości.
Cóż, jest to nie tylko Classpoprawna stała nazwa, ale także istniejąca! (to klasa Class)
Asherah
1
O rany, piękny. Całkowicie zrozum teraz. Dzięki Chris! :)
thenengah
1
Myślę, że użycie klasszmiennej lokalnej jako zmiennej lokalnej pochodzi z Kilofa - używali tej nazwy w kilku przykładach, dokładnie z powodów, które tutaj opisałeś.
Ken Bloom,
To musi dotyczyć starej wersji ruby. Używam Rubiego 1.9.3object_instance.class.name == 'Object'
Augustin Riedinger,
Nie, nadal jest dokładna. Klasa Object.new to Object, ale klasa Object to Class.
Chris Heald
22
klassjest również metodą Railsów (a raczej ActiveRecord) . Służy do pobierania klasy asocjacji.
Jak podano w połączonej treści:
classAuthor<ActiveRecord::Base
has_many :books
endAuthor.reflect_on_association(:books).klass
# => Book
Jedna to nazwa klasy, a druga to domyślnie niezdefiniowana stała. I dla pary jesteś bardziej prawdopodobne, aby zobaczyć, classi klass, ten pierwszy jest kluczowe dla określenia klasy, a drugi jest tylko identyfikator (jak każdy inny ciąg znaków). Jest używany, gdy chcesz napisać słowo „klasa”, ale nie możesz, ponieważ jest to zastrzeżone słowo kluczowe.
Jaki jest sens, mam na myśli, dlaczego / jak go używać, do czego jest zwykle używany?
thenengah
3
Klasa @Sam jest zastrzeżonym słowem kluczowym do definiowania klas. Więc jeśli chcesz mieć do czynienia z klasą ogólną (np. Metaprogramowaniem), nie możesz pisać class = Kernel.const_get(class_name). Ale możesz pisać klass = Kernel.const_get(class_name), a to reprezentuje „klasę”.
Thiago Silveira
2
Chodzi o to, że nie można używać słowa kluczowego „class” na oznaczenie „class”… ponieważ jest to słowo zastrzeżone (logika okrężna, wiem), więc zamiast niego jest zastępowane słowo „klass”. Jest to popularny idiom w wielu innych językach, np. Java i C #.
Scott
więc możesz dynamicznie przypisywać zajęcia? Klass = object.class; Klass.new - coś takiego
thenengah
3
@Sam: użycie Klassdo tego byłoby kiepskim wyborem, ponieważ identyfikatory zaczynające się od wielkich liter są stałymi, więc możesz je ustawić tylko raz. Ale tak, to jest ogólna idea.
klass
jest powszechnie używany do nazwania zmiennej, która przechowujeClass
obiekt (pamiętaj, że klasy też są obiektami), tak jak wklass = String
. Czy możesz podać źródło, w którym go widziałeś, aby uzyskać głębsze wyjaśnienie?clazz
zamiastklass
(na przykład w książce „Metaprogramowanie języka Ruby”).Odpowiedzi:
class
to słowo kluczowe używane do definiowania nowej klasy. Ponieważ jest to zarezerwowane słowo kluczowe, nie możesz go użyć jako nazwy zmiennej. Nie możesz używać słów kluczowych Rubiego jako nazw zmiennych, więc nie będziesz mógł mieć zmiennych o nazwachdef
lubmodule
lubif
lubend
, itd. -class
nie jest inaczej.Na przykład rozważ następujące kwestie:
Próba uruchomienia tego skutkuje błędem, ponieważ nie możesz użyć
class
jako nazwy zmiennej.Aby to naprawić, użyjemy
klass
zamiast tego identyfikatora . Nie jest wyjątkowa, ale jest konwencjonalnie używana jako nazwa zmiennej, gdy masz do czynienia z klasą lub nazwą klasy. Fonetycznie jest to samo, ale ponieważ nie jest to zastrzeżone słowo kluczowe, Ruby nie ma z nim żadnych problemów.Wynik, zgodnie z oczekiwaniami, to
Możesz użyć dowolnej (niezarezerwowanej) nazwy zmiennej, ale społeczność zaczęła używać
klass
. Nie ma żadnej specjalnej magii - oznacza po prostu „Chciałem użyć tutaj nazwy„ klasa ”, ale nie mogę, ponieważ jest to zastrzeżone słowo kluczowe”.Na marginesie, ponieważ kilka razy wpisałeś go nieprawidłowo, warto zauważyć, że w Rubim sprawa ma znaczenie. Tokeny zaczynające się wielką literą to stałe. Za pomocą kilofa :
Zatem prawidłowa pisownia to
class
iklass
, a nieClass
iKlass
. To ostatnie byłoby stałe i obaClass
iKlass
są ważne nazwy stałych, ale polecam przed wykorzystaniem ich do celów przejrzystości.źródło
Class
poprawna stała nazwa, ale także istniejąca! (to klasa Class)klass
zmiennej lokalnej jako zmiennej lokalnej pochodzi z Kilofa - używali tej nazwy w kilku przykładach, dokładnie z powodów, które tutaj opisałeś.object_instance.class.name == 'Object'
klass
jest również metodą Railsów (a raczej ActiveRecord) . Służy do pobierania klasy asocjacji.Jak podano w połączonej treści:
źródło
klass
iclazz
iclasz
tym podobne to twórcze błędy ortograficzne używane do obejścia zastrzeżonego słowaclass
.Byłoby znacznie mniej rażący w oczy użycie
class1
lubcl
lubclassX
lub coś zamiast umyślne błąd ortograficzny.źródło
Jedna to nazwa klasy, a druga to domyślnie niezdefiniowana stała. I dla pary jesteś bardziej prawdopodobne, aby zobaczyć,
class
iklass
, ten pierwszy jest kluczowe dla określenia klasy, a drugi jest tylko identyfikator (jak każdy inny ciąg znaków). Jest używany, gdy chcesz napisać słowo „klasa”, ale nie możesz, ponieważ jest to zastrzeżone słowo kluczowe.źródło
class = Kernel.const_get(class_name)
. Ale możesz pisaćklass = Kernel.const_get(class_name)
, a to reprezentuje „klasę”.Klass
do tego byłoby kiepskim wyborem, ponieważ identyfikatory zaczynające się od wielkich liter są stałymi, więc możesz je ustawić tylko raz. Ale tak, to jest ogólna idea.