В чем разница между классом и классом в рубине? - PullRequest
102 голосов
/ 29 ноября 2010

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

Ответы [ 4 ]

178 голосов
/ 29 ноября 2010

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 являются действительными именами констант, но я бы рекомендовал не использовать их для ясности.

17 голосов
/ 27 января 2014

klass также является Rails (точнее ActiveRecord) метод .Он используется для получения класса ассоциации.

Как указано в связанном содержании:

class Author < ActiveRecord::Base
  has_many :books
end

Author.reflect_on_association(:books).klass
# => Book
12 голосов
/ 29 апреля 2011

klass и clazz и clasz и тому подобное - творческие орфографические ошибки, используемые для обхода зарезервированного слова class.

Это было бы гораздо менее раздражающим при использовании class1 или cl или classX или что-то, а не преднамеренное опечатка.

5 голосов
/ 29 ноября 2010

Один - это имя класса, а другой - просто неопределенная константа по умолчанию.А для пары, которую вы, скорее всего, увидите, class и klass, первое является ключевым словом для определения классов, а второе - просто идентификатором (как любая другая строка символов).Он используется, когда вы хотите написать слово «класс», но не можете, потому что это зарезервированное ключевое слово.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...