我有一个方法,它接受一个对象,以及它需要应用于对象的转换器方法:
def f x, conv
conv x
end
如何在字符串上调用它并使用to_f
作为转换器?这不起作用:
f '123', &:to_f
编辑:这是一个人为的例子,我知道这可以简化或以不同方式编写。
EDIT2:感谢这些建议使用块的人,这是有效的。我试图找出是否可以用方法来完成,比如在函数式语言中。
答案 0 :(得分:2)
您可以使用yield
执行传递的proc:
def f(x)
yield x
end
f(x) { |y| y.to_f }
或者如果你想将proc作为命名参数,你可以使用&
:
def f(x, &proc)
proc.call x
end
你不能只传递一个任意函数,因为ruby中只有实例方法,所以你不能这样做:
to_f.to_proc
要获得一个功能,如果你想这样做,你必须使用send
:
def g(x, sym)
x.send sym
end
g(2, :to_f)
请记住,ruby不是一种函数式语言,即使它有很多功能结构,它也是一种非常面向对象的语言。
答案 1 :(得分:0)
您的方法必须接受一个您必须调用的块:
def f x, &conv
conv.call x
end
或
def f x
yield x
end
修改强>
你也可以将方法作为常规对象传递(你得到一个"".method(:to_i)
),但它们的行为就像procs一样,并且不能像绑定到对象时那样在self
上运行。