Chr*_*ald 182

class是用于定义新类的关键字.由于它是保留关键字,因此您无法将其用作变量名称.你不能使用任何Ruby的关键字作为变量名,所以你将不能够有一个名为变量defmoduleifend等- 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:

常量名称以大写字母开头,后跟名称字符.类名和模块名是常量,遵循常量命名约定.按照惯例,常量变量通常使用大写字母和下划线拼写.

因此,正确的拼写是classklass,而不是ClassKlass.后者将是常数,两者ClassKlass有效常量名,但我会建议不要使用它们为了清晰起见.

  • 好吧,不仅"Class"特别是一个有效的常量名称,它也是一个现存的名称!(这是Class类) (7认同)

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)


Jas*_*n S 12

klassclazz等等clasz是用于绕过保留字的创造性拼写错误class.

这将是远不如不和谐的眼睛使用class1clclassX或东西,而不是故意拼写错误.


Chu*_*uck 5

一个是类的名称,另一个是默认的未定义常量.而对于这对你更有可能看到,classklass,前者是用于定义类的关键词,而后者仅仅是一个标识符(如人物的任何其他字符串).它是在你想写"class"这个词的时候使用的,但却不能,因为它是一个保留的关键词.

  • @Sam类是用于定义类的保留关键字.因此,如果您想处理泛型类(如元编程),则不能编写`class = Kernel.const_get(class_name)`.但你可以写`klass = Kernel.const_get(class_name)`,那用来表示"class". (3认同)
  • @Sam:使用`Klass`这将是一个糟糕的选择,因为以大写字母开头的标识符是常量,所以你只能设置一次.但是,是的,这是一般的想法. (3认同)
  • 关键是你不能使用关键字'class'来表示'class'...因为它是一个保留字(循环逻辑,我知道)所以替换了'klass'这个词.这是许多其他语言中常见的习语,例如Java和C#. (2认同)