class
- це ключове слово, яке використовується для визначення нового класу. Оскільки це зарезервоване ключове слово, ви не можете використовувати його як ім'я змінної. Ви не можете використовувати жодне з ключових слів Рубі як імен змінних, тому ви не зможете мати змінних з назвою def
або, module
або if
або end
тощо class
, не відрізняється.
Наприклад, врахуйте наступне:
def show_methods(class)
puts Object.const_get(class).methods.inspect
end
show_methods "Kernel"
Спроба запустити це призводить до помилки, оскільки ви не можете використовувати class
як ім'я змінної.
test.rb:1: syntax error, unexpected kCLASS, expecting ')'
def show_methods(class)
^
test.rb:2: syntax error, unexpected ')'
puts Object.const_get(class).methods.inspect
Щоб виправити це, ми klass
замість цього використаємо ідентифікатор . Це не є особливим, але воно умовно використовується як ім'я змінної, коли ви маєте справу з іменем класу чи класу. Це фонетично те саме, але оскільки це не зарезервоване ключове слово, у Ruby з цим немає проблем.
def show_methods(klass)
puts Object.const_get(klass).methods.inspect
end
show_methods "Kernel"
Вихід, як і очікувалося, є
["method", "inspect", "name", "public_class_method", "chop!"...
Ви можете використовувати там будь-яке (незарезервоване) ім'я змінної, але спільнота взяла на себе використання klass
. У ньому немає особливої магії - це просто означає "я хотів тут використовувати ім'я" клас ", але не можу, оскільки це зарезервоване ключове слово".
Зі сторони, оскільки ви кілька разів помилялися на помилках, варто зазначити, що в Рубі справа має значення. Маркери, які починаються з великої літери, є константами. Через Пікакс :
Постійне ім'я починається з великої літери, а потім символів імені. Назви класів та назви модулів є константами та дотримуються конвенцій постійного іменування. За умовою, постійні змінні зазвичай написані за допомогою великих літер та підкреслень.
Таким чином, правильним написанням є class
і klass
, а не Class
і Klass
. Останні були б константами, і обидва, Class
і Klass
є дійсними постійними іменами, але я б рекомендував не використовувати їх для наочності.