Class和Klass有什么区别?
klass
通常用于命名包含Class
对象的变量(请记住类也是对象),如中所示klass = String
。您能否提供您所见之处的来源,以进行更深入的说明?
clazz
而不是klass
(例如,在“ Metaprogramming Ruby”一书中)。
Class和Klass有什么区别?
klass
通常用于命名包含Class
对象的变量(请记住类也是对象),如中所示klass = String
。您能否提供您所见之处的来源,以进行更深入的说明?
clazz
而不是klass
(例如,在“ Metaprogramming Ruby”一书中)。
Answers:
class
是用于定义新类的关键字。由于它是保留关键字,因此您不能将其用作变量名。您不能将Ruby的任何关键字用作变量名,因此您将无法拥有名为def
or module
或if
or的变量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中,大小写很重要。以大写字母开头的令牌是常量。通过镐:
常量名称以大写字母开头,后跟名称字符。类名和模块名是常量,并遵循常量命名约定。按照约定,常数变量通常在整个过程中使用大写字母和下划线进行拼写。
因此,正确的拼写是class
and klass
,而不是Class
and Klass
。后者将是常数,两者Class
并Klass
有效常量名,但我会建议不要使用它们为了清晰起见。
Class
一个有效的常数名称,而且还是一个现成的名称!(这是班级课程)
klass
as作为局部变量来自镐-他们在几个示例中使用了该名称,正是出于您在此描述的原因。
object_instance.class.name == 'Object'
一个是类的名称,另一个是默认情况下未定义的常量。对于这对,您更有可能看到class
和klass
,前者是用于定义类的关键字,而后者只是一个标识符(与其他任何字符串一样)。当您想写“类”一词时使用它,但不能,因为它是保留关键字。
class = Kernel.const_get(class_name)
。但是您可以编写klass = Kernel.const_get(class_name)
,它用来表示“类”。
Klass
该选项将是一个糟糕的选择,因为以大写字母开头的标识符是常量,因此只能设置一次。但是,是的,这是普遍的想法。