Chr*_*ald 182
class是用于定义新类的关键字.由于它是保留关键字,因此您无法将其用作变量名称.你不能使用任何Ruby的关键字作为变量名,所以你将不能够有一个名为变量def或module或if或end等- class是没有什么不同.
例如,请考虑以下事项:
def show_methods(class)
puts Object.const_get(class).methods.inspect
end
show_methods "Kernel"
Run Code Online (Sandbox Code Playgroud)
尝试运行此操作会导致错误,因为您不能将其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
Run Code Online (Sandbox Code Playgroud)
要修复它,我们将使用标识符klass.它并不特别,但在处理类或类名时,它通常用作变量名.它在语音上是相同的,但由于它不是保留关键字,因此Ruby没有任何问题.
def show_methods(klass)
puts Object.const_get(klass).methods.inspect
end
show_methods "Kernel"
Run Code Online (Sandbox Code Playgroud)
正如预期的那样,输出是
["method", "inspect", "name", "public_class_method", "chop!"...
Run Code Online (Sandbox Code Playgroud)
您可以在那里使用任何(非保留的)变量名称,但社区已经开始使用klass.它没有任何特殊的魔力 - 它只是意味着"我想在这里使用名称'class',但我不能,因为它是一个保留的关键字".
另一方面,由于你输错了几次,值得注意的是,在Ruby中,案例很重要.以大写字母开头的标记是常量.通过Pickaxe:
常量名称以大写字母开头,后跟名称字符.类名和模块名是常量,遵循常量命名约定.按照惯例,常量变量通常使用大写字母和下划线拼写.
因此,正确的拼写是class和klass,而不是Class和Klass.后者将是常数,两者Class并Klass有效常量名,但我会建议不要使用它们为了清晰起见.
Daz*_*win 17
klass也是一种Rails(或更确切地说是ActiveRecord)方法.它用于获取关联的类.
如链接内容中所述:
class Author < ActiveRecord::Base
has_many :books
end
Author.reflect_on_association(:books).klass
# => Book
Run Code Online (Sandbox Code Playgroud)
一个是类的名称,另一个是默认的未定义常量.而对于这对你更有可能看到,class和klass,前者是用于定义类的关键词,而后者仅仅是一个标识符(如人物的任何其他字符串).它是在你想写"class"这个词的时候使用的,但却不能,因为它是一个保留的关键词.