В чем разница между классом и классом в рубине?

В чем разница между классом и классом?

Ответ 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, первая является ключевым словом для определения классов, а последний - просто идентификатором (как и любая другая строка символов). Он использовался, когда вы хотели бы написать слово "класс", но не можете, потому что это зарезервированное ключевое слово.