考虑以下Ruby表达式:
y=x.a.b.c.d.e.f
当然,x
是一个对象,a
到f
是为一个类定义的方法,它匹配链中前一个方法的返回值。现在说我想用自定义块替换方法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)是否正确,或者我在这里遗漏了什么?
答案 0 :(得分:3)
(a)是的。 Ruby已经拥有了。它被称为yield_self
。
(b)不。这不是一种不好的风格。