В чем разница между классом и классом?
В чем разница между классом и классом в рубине?
Ответ 1
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 дело имеет значение. Токены, начинающиеся с большой буквы, являются константами. Через Pickaxe:
Имя константы начинается с прописной буквы, за которой следуют символы имени. Имена классов и имена модулей являются константами и следуют соглашениям об именах констант. По соглашению постоянные переменные обычно пишутся заглавными буквами и подчеркиваниями.
Таким образом, правильное написание class
и klass
, а не class
и klass
. Последние были бы константами, и оба class
и klass
были действительными постоянными именами, но я бы рекомендовал их использовать для ясности.
Ответ 2
klass
и clazz
и clasz
и т.п. являются творческими ошибками, используемыми для обхода зарезервированного слова class
.
Было бы гораздо меньше раздражать глаза, чтобы использовать class1
или cl
или classX
или что-то, а не преднамеренное орфографическое письмо.
Ответ 3
Я думаю, что klass
также является методом Rails (или, скорее, ActiveRecord) . Он используется для получения класса ассоциации.
Ответ 4
Один из них - это имя класса, а другое - константа undefined по умолчанию. А для пары, которую вы, скорее всего, увидите, class
и klass
, первая является ключевым словом для определения классов, а последний - просто идентификатором (как и любая другая строка символов). Он использовался, когда вы хотели бы написать слово "класс", но не можете, потому что это зарезервированное ключевое слово.