Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby 如何指定要作为参数传递的方法?_Ruby - Fatal编程技术网

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
的用途。@squiguy
map
的用途是什么?@akonsu它可以基于方法变换数组。我可以补充一个答案,但看起来你不是在谈论数组。
def g(x, sym)
  x.send sym
end

g(2, :to_f)