【问题标题】:reference to a method on an object引用对象上的方法
【发布时间】:2012-09-28 15:28:33
【问题描述】:

我之前也问过类似的问题:reference to a method?

但现在我想弄清楚如何使用这段代码来做到这一点:

arr0 = [1,2,3]
arr1 = [2,3,4,5]
arr1.reject! {|x|
    arr0.include? x
}

显然{|x| arr0.include? x} 可以简化为arr0.include?。但是我不知道如何获得这个方法参考。

编辑:我对如何使用更简单的语法在 Ruby 中减去数组不感兴趣。我正在寻找一种方法来获取对方法的引用。

【问题讨论】:

  • 为什么不直接做arr1 - arr0

标签: ruby


【解决方案1】:
arr1.reject!(&arr0.method(:include?))

【讨论】:

  • @steenslag:参数列表中的&符号表示“将此块包装在Proc中”。 argument list 中的 & 表示“将这个 Proc 解包到一个块中(如果它还不是一个块,请先调用 to_proc )”。 Method 实现了to_proc,就像Symbol 一样,所以它的工作方式与Symbols 完全相同。
【解决方案2】:

Ruby 中的每个对象都有一个method 方法:

m = [1,2,3].method(:include?) #reference to the include? method of this array.
p m.call(1) #call the method with an argument ; => true

【讨论】:

    【解决方案3】:

    你可以这样做

    arr1 - arr0
    

    你不能用椒盐卷饼冒号这样做,因为你有一个论据。

    【讨论】:

    • 是的,我可以用这种语法做到这一点。我的问题是如何在我发布的示例代码中获取方法。
    • arr1 -= arr0 因为拒绝!修改接收器。
    • :) 谢谢。我并不是说我一定要使用 pretzel 列。
    【解决方案4】:
    arr0 = [1,2,3]
    arr1 = [2,3,4,5]
    
    m = arr0.method(:include?)
    arr1.reject!(&m) #=> [4, 5]
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-13
      • 2017-06-01
      • 1970-01-01
      • 2016-07-20
      相关资源
      最近更新 更多