Ruby 富<;红宝石条
我最近发现,您可以检测一个类/模块是否包含另一个类/模块。例如,Ruby 富<;红宝石条,ruby,Ruby,我最近发现,您可以检测一个类/模块是否包含另一个类/模块。例如,Array是可枚举的,因此您可以 Array < Enumerable # true 这里到底发生了什么?这个语法在ruby中是如何工作的 这里到底发生了什么?这个语法在ruby中是如何工作的 字符串和数组类继承自类类,该类继承自模块类,如果这两个模块出现在祖先链中,则普通的在该链中的位置适用。如果不是,则返回nil。以下是如何获取类的祖先链: >> Array.ancestors => [Array, E
Array
是可枚举的
,因此您可以
Array < Enumerable # true
这里到底发生了什么?这个语法在ruby中是如何工作的
这里到底发生了什么?这个语法在ruby中是如何工作的
字符串
和数组
类继承自类
类,该类继承自模块
类,如果这两个模块出现在祖先链中,则普通的
在该链中的位置适用。如果不是,则返回nil
。以下是如何获取类的祖先链:
>> Array.ancestors
=> [Array, Enumerable, Object, Kernel, BasicObject]
如果一个类是祖先链中另一个类的“左”,则<方法返回true,否则返回false:
>> Array < Object
=> true
>> Array < Enumerable
=> true
如果将可枚举模型包括到String类中,它也会返回true
class String
include Enumerable
end
# Enumerable is now included in String
String < Enumerable #true
<方法的显式语法如下所示:
>> Array.<(Object)
=> true
>> Array.send(:<, Object)
=> true
>数组。真的
>>Array.send(:true)
of在这里是不相关的。它有自己的定义,不依赖于
,您可以通过单击文档中的“查看源代码”看到这一点。
>> Array < Object
=> true
>> Array < Enumerable
=> true
>> Enumerable < Array
=> false
>> Array < Array
=> false
>> Array.ancestors
=> [Array, Enumerable, Object, Kernel, BasicObject]
>> String.ancestors
=> [String, Comparable, Object, Kernel, BasicObject]
class String
include Enumerable
end
# Enumerable is now included in String
String < Enumerable #true
>> 3 + 4
=> 7
>> 3.+(4)
=> 7
>> Array.<(Object)
=> true
>> Array.send(:<, Object)
=> true