Class和Klass在ruby之间有什么区别?

Class和Klass有什么区别?

class是用来定义一个新类的关键字。 由于它是一个保留关键字,因此您无法将其用作variables名称。 你不能使用任何Ruby的关键字作为variables名,所以你将不能使用名为defmodulevariables或者if或者end等。

例如,请考虑以下几点:

 def show_methods(class) puts Object.const_get(class).methods.inspect end show_methods "Kernel" 

试图运行这个会导致错误,因为你不能使用class作为variables名。

 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 。 这不是特别的,但是当你处理一个类或类名时,它通常被用作variables名。 它在语音上是相同的,但由于它不是一个保留的关键字,所以Ruby没有任何问题。

 def show_methods(klass) puts Object.const_get(klass).methods.inspect end show_methods "Kernel" 

产出,如预期的那样

 ["method", "inspect", "name", "public_class_method", "chop!"... 

你可以使用任何(非保留)variables名称,但社区已经采取使用klass 。 它没有任何特殊的魔法 – 它只是意味着“我想在这里使用'class'这个名字,但是我不能,因为它是一个保留关键字”。

在一个侧面说明,因为你已经错误地input了几次,值得注意的是,在Ruby中,案件很重要。 以大写字母开头的标记是常量。 通过镐 :

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

因此,正确的拼写是classklass ,而不是ClassKlass 。 后者将是常量, ClassKlass都是有效的常量名,但我build议不要将它们用于清晰目的。

claszclaszclasz等是创造性拼写错误,用来绕过保留字class

使用class1clclassX或其他东西,而不是故意的拼写错误,会classX

我认为klass也是一个Rails(或更确切地说ActiveRecord)的方法 。 它被用于获得一个协会的类。

一个是类的名字,另一个默认是一个未定义的常量。 而对于你更可能看到, classklass ,前者是一个关键字定义类,而后者只是一个标识符(就像任何其他string)。 当你想写“class”这个单词的时候会用到它,但是不能用,因为它是一个保留的关键字。