如果有的话,def、alias 和 begin in Ruby 等关键字的 class 是什么?
What is the class of keywords like def, alias, and begin in Ruby, if any?
据我了解,Ruby中的一切都是对象,每个对象都有一个超类,除了BasicObject
,它位于继承树的顶端。
def
、begin
和 alias
等关键字的超类是什么?
它们是关键字,不是对象。如果有的话,它们将是 Kernel
中的方法,结果是 class Method
,但它们只是关键字,因此既没有 class 也没有 superclass。他们是特例,由口译员特殊对待;它们被解析以产生解释器实际执行的抽象语法树,并且在涉及对象和 classes 的任何事情完成时可能早已消失。毕竟,end
作为一种方法如何工作?
请注意,并非所有看起来像关键字 的东西都是 。举个例子,loop
:
loop do
puts 'Hello, world!'
end
虽然它看起来像关键字,但实际上是方法 Kernel#loop
。
到目前为止,判断某物是方法还是关键字的最简单方法是 运行 上面这段又长又复杂的代码:
method(name_to_test)
其中 name_to_test
是 Symbol 文字或 Symbol 的实例。它使用始终可用的方法 Object#method
,该方法可以 returns 具有该名称的 Method
或抛出 NameError
。如果它安静地运行——即不引发任何错误——那么你就有了一个方法;如果它引发错误,则它不是一种方法。请注意,它也可以是一个变量,而不是关键字或方法,但通过查看文件中以前的代码并快速搜索文档应该很容易分辨出来。
如果您想查看当前的关键字列表(或者不想启动 IRB/your 最喜欢的 IDE),请检查 RMI 源代码中的 this file。这有点难以理解,但基本上,如果您在该列表中看到 keyword_[thing you're looking for]
(可能删除了前导 _
),它就是一个关键字。为了使这个答案尽可能独立,这里是(当前)关键字列表,基于此:
__LINE__
, __FILE__
, __ENCODING__
, BEGIN
, END
, alias
, and
, begin
, break
, case
, class
, def
, defined
, do
, else
, elsif
, end
, ensure
, false
, for
, in
, module
, next
, nil
, not
, or
, redo
, rescue
, retry
, return
, self
, super
, then
, true
, undef
, when
, yield
, if
, unless
, while
, until
(非常感谢 engineersmnky 指出列表!我自己绝对找不到。)
据我了解,Ruby中的一切都是对象,每个对象都有一个超类,除了BasicObject
,它位于继承树的顶端。
def
、begin
和 alias
等关键字的超类是什么?
它们是关键字,不是对象。如果有的话,它们将是 Kernel
中的方法,结果是 class Method
,但它们只是关键字,因此既没有 class 也没有 superclass。他们是特例,由口译员特殊对待;它们被解析以产生解释器实际执行的抽象语法树,并且在涉及对象和 classes 的任何事情完成时可能早已消失。毕竟,end
作为一种方法如何工作?
请注意,并非所有看起来像关键字 的东西都是 。举个例子,loop
:
loop do
puts 'Hello, world!'
end
虽然它看起来像关键字,但实际上是方法 Kernel#loop
。
到目前为止,判断某物是方法还是关键字的最简单方法是 运行 上面这段又长又复杂的代码:
method(name_to_test)
其中 name_to_test
是 Symbol 文字或 Symbol 的实例。它使用始终可用的方法 Object#method
,该方法可以 returns 具有该名称的 Method
或抛出 NameError
。如果它安静地运行——即不引发任何错误——那么你就有了一个方法;如果它引发错误,则它不是一种方法。请注意,它也可以是一个变量,而不是关键字或方法,但通过查看文件中以前的代码并快速搜索文档应该很容易分辨出来。
如果您想查看当前的关键字列表(或者不想启动 IRB/your 最喜欢的 IDE),请检查 RMI 源代码中的 this file。这有点难以理解,但基本上,如果您在该列表中看到 keyword_[thing you're looking for]
(可能删除了前导 _
),它就是一个关键字。为了使这个答案尽可能独立,这里是(当前)关键字列表,基于此:
__LINE__
,__FILE__
,__ENCODING__
,BEGIN
,END
,alias
,and
,begin
,break
,case
,class
,def
,defined
,do
,else
,elsif
,end
,ensure
,false
,for
,in
,module
,next
,nil
,not
,or
,redo
,rescue
,retry
,return
,self
,super
,then
,true
,undef
,when
,yield
,if
,unless
,while
,until
(非常感谢 engineersmnky 指出列表!我自己绝对找不到。)