如何将方法的结果传递给ruby中的另一个方法? 例如:
class D
def initialize(text)
@text = text
end
def a s
"hello #{s}"
end
def b s
"hi #{s}"
end
end
所以,我想要做的是将方法a的输出传递给方法b。所以基本上(如果方法不在类中)我可以执行以下操作:
puts b(a "Tom") #=>hi hello Tom
然而,即使这不在一个类中,如果有很多方法也不会好看,所以必须有更优雅的方法来做到这一点。那么通过将方法a和b应用于类D的实例来获得输出hi hello Tom
的正确方法是什么?
UPDATE 我只是想让它更清楚一些。例如,在F#中,您可以执行以下操作:
let a s = "hello " + s
let b s = "hi " + s
"Tom" |> a |> b #=> hello hi Tom
这里我们定义了函数a和b,然后将结果传递给下一个函数。 我知道它是一种功能性语言,所以做事的方式会有所不同。但我只是想知道Ruby中是否有这样的技巧?
答案 0 :(得分:5)
您可以退出()
def a s
"hello #{s}"
end
def b s
"hi #{s}"
end
puts b a "Tom"
如果你有很多方法:
puts [:a,:b].inject("Tom"){|result,method| self.send(method,result)}
如果要将这些方法与任何对象(包括类)一起使用:
module Kernel
def chain_methods(start_value, *methods)
methods.inject(start_value){|result,method| self.send(method,result)}
end
end
class D
def a s
"hello #{s}"
end
def b s
"hi #{s}"
end
end
class E
class << self
def a s
"hello #{s}"
end
def b s
"hi #{s}"
end
end
end
# Example with instance methods
puts D.new.chain_methods("Tom", :a, :b)
# Example with class methods
puts E.chain_methods("Tom", :a, :b)
# Thanks mudasobwa :
E.chain_methods("Tom", :a, :b, :puts)