ruby - ruby 中的 Class 和 Klass 有什么区别?

标签 ruby class

类和类有什么区别?

最佳答案

class 是用于定义新类的关键字。由于它是保留关键字,因此您不能将它用作变量名。您不能使用 Ruby 的任何关键字作为变量名,因此您不能将变量命名为 defmoduleifend 等 - 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 :

A constant name starts with an uppercase letter followed by name characters. Class names and module names are constants, and follow the constant naming conventions. By convention, constant variables are normally spelled using uppercase letters and underscores throughout.

因此,正确的拼写是 classklass,而不是 ClassKlass。后者是常量,ClassKlass 都是有效的常量名称,但为了清楚起见,我建议不要使用它们。

关于ruby - ruby 中的 Class 和 Klass 有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4299289/

相关文章:

ruby-on-rails - 如何在 Ruby on Rails 中编写帮助程序来捕获 Haml block ?

javascript类为什么第二个参数getter在下面不起作用

c++ - 如何使用 `this` 访问类数组中的成员变量

java - 类描述中要写什么

java - 动态地将方法体重新分配给对象

c# - 从另一个类 C# 访问原始数组

ruby - 是否有其他最快打印相同结果的方法?

ruby - 逐步迭代字符数组

ruby 获取 'enter key'

ruby-on-rails - 使用回形针将 Heroku 上的图像上传到 Amazon s3 时 Rails 访问被拒绝