在方法参数中引用receiver对象?

时间:2015-12-18 21:27:21

标签: ruby

例如,考虑一个自身的数组交叉产品:

[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示例的解决方案,而是为了解决引用接收器对象的一般问题。

1 个答案:

答案 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]]