Class和Klass有什么区别?
答案 0 :(得分:176)
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
。它没有任何特殊的魔力 - 它只是意味着“我想在这里使用名称'class',但我不能,因为它是一个保留的关键字”。
另一方面,由于您输错了几次,因此值得注意的是,在Ruby中,案例很重要。以大写字母开头的标记是常量。通过Pickaxe:
常量名称以大写字母开头,后跟名称字符。类名和模块名是常量,遵循常量命名约定。按照惯例,常量变量通常使用大写字母和下划线拼写。
因此,正确的拼写是class
和klass
,而不是Class
和Klass
。后者将是常量,Class
和Klass
都是有效的常量名称,但为了清晰起见,我建议不要使用它们。
答案 1 :(得分:17)
klass
也是Rails(或者更确切地说是ActiveRecord)method。它用于获取关联类。
如链接内容所述:
class Author < ActiveRecord::Base
has_many :books
end
Author.reflect_on_association(:books).klass
# => Book
答案 2 :(得分:11)
klass
以及clazz
和clasz
等是用于绕过保留字class
的创意拼写错误。
使用class1
或cl
或classX
或其他东西而不是故意拼写错误,对眼睛的影响要小得多。
答案 3 :(得分:5)
一个是类的名称,另一个是默认的未定义常量。对于你更有可能看到的那对,class
和klass
,前者是用于定义类的关键字,而后者只是一个标识符(就像任何其他字符串一样)。它是在你想写“class”这个词的时候使用的,但不能,因为它是一个保留的关键词。