0 ruby inheritance class keyword superclass
据我所知,Ruby中的所有东西都是一个对象,每个对象都有一个超类,除了它BasicObject,它位于继承树的顶部.
是什么样的关键字的超类def,begin和alias?
它们是关键词,而不是对象.如果有的话,它们将是方法Kernel,并且因此只有类Method,但它们只是关键字,因此既没有类也没有超类.他们是一个特例,由翻译专门处理; 它们被解析为生成解释器实际执行的抽象语法树,并且可能早已完成涉及对象和类的任何事情.毕竟,如何end作为一种方法?
请注意,并非所有看起来像关键字的都是一个.举个例子,举个例子loop:
loop do
puts 'Hello, world!'
end
Run Code Online (Sandbox Code Playgroud)
虽然它可能看起来像一个关键字,但它实际上是方法Kernel#loop.
到目前为止,判断某个方法或关键字的最简单方法是在其上运行这个冗长而复杂的代码:
method(name_to_test)
Run Code Online (Sandbox Code Playgroud)
其中name_to_test是Symbol文字或Symbol的实例.它使用始终可用的方法Object#method,该方法返回Method带有该名称或抛出a NameError.如果它以静默方式运行 - 即不会引起任何错误 - 那么你就有了一个方法; 如果它引发错误,那么它不是一种方法.请注意,它也可以是变量,而不是关键字或方法,但它应该很容易通过查看文件中的先前代码并快速搜索文档来判断.
如果要查看当前关键字列表(或者不想启动IRB /您喜欢的IDE),请在RMI源中检查此文件.这有点难以理解,但基本上,如果你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
(非常感谢工程师指出列表!永远不会自己找到它.)
| 归档时间: |
|
| 查看次数: |
145 次 |
| 最近记录: |