例如,考虑一个自身的数组交叉产品:
[1,2,3].product([1,2,3])
#=> [[1, 1], [1, 2], [1, 3], [2, 1], [2, 2], [2, 3], [3, 1], [3, 2], [3, 3]]
我想写的是:
[1,2,3].product(receiver)
self
在这里不起作用,而创建像temp = [1,2,3]
这样的临时变量来做temp.product(temp)
就是一个不错的选择。
有没有一个很好的内置方法来实现这个目标?
注意:我不是在寻找给出的Array示例的解决方案,而是为了解决引用接收器对象的一般问题。
答案 0 :(得分:1)
您可以扩展Array:
class Array
def selfproduct
self.product(self)
end
end
p [1,2].selfproduct() #-> [[1, 1], [1, 2], [2, 1], [2, 2]]
p [1,2,3].selfproduct() #->[[1, 1], [1, 2], [1, 3], [2, 1], [2, 2], [2, 3], [3, 1], [3, 2], [3, 3]]