我想将组合方法与自定义类一起使用。
如果我的班级看起来像这样......
class MyClass
def initialize
@data = []
end
def to_a
@data
end
end
我可以称之为......
myobj = MyClass.new
myobj.to_a.combination(2) {|a,b| puts "#{a} #{b}" }
但我宁愿有这个......
myobj.combination {|a,b| puts "#{a} #{b}" }
我尝试编写一个类方法来包装组合方法,传递块。但它不起作用。
def combination(&block)
@data.to_a.combination(2) block.call
end
另外,有没有人知道为什么组合在Array类中而不是Enumerable?我原以为它会更有用。
答案 0 :(得分:4)
该块是Array#组合的一种特殊参数(就像您在自己的定义中得到的那样)。正确的调用是:
def combination(&block)
@data.to_a.combination(2, &block)
end
答案 1 :(得分:0)
试试这个:
def combination(&block)
@data.to_a.combination(2) { block }
end