【发布时间】:2018-03-27 01:13:04
【问题描述】:
Ruby 的!~ 记录在哪里?我希望它在Regexp page 或String page 上,但它不存在。而=~ 在 Regexp 页面上出现 49 次,在 String 页面上出现 8 次。
【问题讨论】:
Ruby 的!~ 记录在哪里?我希望它在Regexp page 或String page 上,但它不存在。而=~ 在 Regexp 页面上出现 49 次,在 String 页面上出现 8 次。
【问题讨论】:
您可以使用method 查找方法的所有者:
''.method(:!~)
#=> #<Method: String(Kernel)#!~>
//.method(:!~)
#=> #<Method: Regexp(Kernel)#!~>
!~ 定义在Kernel 模块中,包含在Object 中:
String.ancestors
#=> [String, Comparable, Object, Kernel, BasicObject]
Regexp.ancestors
#=> [Regexp, Object, Kernel, BasicObject]
因为Kernel 包含在(每个)Object 中,为了方便起见,它的实例方法记录在Object 中。 (或文档中所说的“清晰”,但 IMO 使其不太清楚)
所以这里是:Object#!~
obj !~ other → true or false
如果两个对象不匹配(使用
=~方法),则返回true,否则返回false。
【讨论】:
它是on Object,因为它可以委托给任何=~ 实现。
【讨论】:
Object(或更准确地说是Kernel)也实现了默认的=~,它被Regexp、String和Symbol覆盖。