class
- ключевое слово, используемое для определения нового класса. Поскольку это зарезервированное ключевое слово, вы не можете использовать его в качестве имени переменной. Вы не можете использовать ни одно из ключевых слов Ruby в качестве имен переменных, поэтому вы не сможете иметь переменные с именами 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
. У него нет особой магии - оно просто означает «я хотел использовать здесь имя« класс », но не могу, так как это зарезервированное ключевое слово».
Кстати, поскольку вы несколько раз неправильно его напечатали, стоит отметить, что в Ruby дело имеет значение. Токены, начинающиеся с заглавной буквы, являются константами. Через Кирку :
Имя константы начинается с заглавной буквы, за которой следуют символы имени. Имена классов и модулей являются константами и соответствуют соглашениям о постоянных именах. По соглашению постоянные переменные обычно пишутся с использованием заглавных букв и подчеркиваний.
Таким образом, правильное написание - class
и klass
, а не Class
и Klass
. Последние будут константами, и Class
и Klass
являются действительными именами констант, но я бы рекомендовал не использовать их для ясности.