在Ruby中链接方法,并将一个块注入链中

时间:2018-03-28 10:30:30

标签: ruby

考虑以下Ruby表达式:

y=x.a.b.c.d.e.f

当然,x是一个对象,af是为一个类定义的方法,它匹配链中前一个方法的返回值。现在说我想用自定义块替换方法c的调用,即我希望实现

的效果
temp=x.a.b
temp1=.... (calculate something based on the value of temp)
y=temp1.d.e.f

但使用方法链接。

定义一种合适的方法来实现这一目标当然是微不足道的:

class Object

  def pass
    yield(self)
  end

end

这将允许我写一些类似

的内容
y=x.a.b.pass {|the_b| .....}.d.e.f

现在问我的问题:

鉴于Ruby已经有类似问题的方法(Object#tap),我想知道为什么它没有类似于我刚才解释的Object#pass的方法。我怀疑,要么

(a)Ruby已经提供了这样的功能,我只是愚蠢地找到它,或者

(b)我想要实现的将被视为糟糕的编程风格(但那么,为什么?)

(a)或(b)是否正确,或者我在这里遗漏了什么?

1 个答案:

答案 0 :(得分:3)

(a)是的。 Ruby已经拥有了。它被称为yield_self

(b)不。这不是一种不好的风格。