Ruby 如何指定要作为参数传递的方法?
我有一个接受对象的方法和一个需要应用于对象的转换器方法:Ruby 如何指定要作为参数传递的方法?,ruby,Ruby,我有一个接受对象的方法和一个需要应用于对象的转换器方法: def f x, conv conv x end 我如何在字符串上调用它并使用to_f作为转换器?这不起作用: f '123', &:to_f 编辑:这是一个人为的例子,我知道这可以简化或写得不同 编辑2:多亏了那些建议使用积木的人,这才有效。我正在尝试找出是否可以使用函数式语言中的方法来实现这一点。您的方法必须接受一个块,您必须调用该块: def f x, &conv conv.call x end 或 编
def f x, conv
conv x
end
我如何在字符串上调用它并使用to_f
作为转换器?这不起作用:
f '123', &:to_f
编辑:这是一个人为的例子,我知道这可以简化或写得不同
编辑2:多亏了那些建议使用积木的人,这才有效。我正在尝试找出是否可以使用函数式语言中的方法来实现这一点。您的方法必须接受一个块,您必须调用该块:
def f x, &conv
conv.call x
end
或
编辑:
您也可以将方法作为常规对象传递(您可以使用
“”.method(:to_i)
)获得一个方法,但它们的行为就像procs一样,不能像绑定到对象时那样对self
进行操作。您可以使用yield
来执行传递的过程:
def f(x)
yield x
end
f(x) { |y| y.to_f }
或者,如果希望将其作为命名参数,可以使用&
:
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不是一种函数式语言,尽管它有很多函数结构,但它是一种非常面向对象的语言 多谢各位。你知道这是否可以通过函数式语言中的方法来实现吗?@akonsu是的,这就是
map
的用途。@squiguymap
的用途是什么?@akonsu它可以基于方法变换数组。我可以补充一个答案,但看起来你不是在谈论数组。
def g(x, sym)
x.send sym
end
g(2, :to_f)