【问题标题】:Where is !~ documented?!~ 记录在哪里?
【发布时间】:2018-03-27 01:13:04
【问题描述】:

Ruby 的!~ 记录在哪里?我希望它在Regexp pageString page 上,但它不存在。而=~ 在 Regexp 页面上出现 49 次,在 String 页面上出现 8 次。

【问题讨论】:

    标签: ruby regex operators


    【解决方案1】:

    您可以使用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

    【讨论】:

    • 感谢所有这些信息,这对我以后想知道的其他钓鱼方法很有帮助。
    【解决方案2】:

    它是on Object,因为它可以委托给任何=~ 实现。

    【讨论】:

    • 事实上,Object(或更准确地说是Kernel)也实现了默认的=~,它被RegexpStringSymbol覆盖。
    猜你喜欢
    • 2010-10-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-06-15
    • 2017-05-20
    • 2015-08-28
    • 1970-01-01
    相关资源
    最近更新 更多