如何将参数传递给Ruby中也是参数本身的方法?

时间:2016-06-04 14:41:51

标签: ruby

*如果问题的措辞令人困惑,请道歉。我不知道该怎么问。

我该怎么办?

def track_time(function, input)
    beg = Time.now

    function(input)

    end = Time.now
    end - beg
end

然后传递一个函数和一个值来使用该函数。

def double(value)
    value + value
end

p track_time(double, 5)

目标是创建可重复的内容,以便跟踪不同功能需要多长时间才能完成。

3 个答案:

答案 0 :(得分:3)

首先,您不能将'end'用作变量名。

关于你的问题,我同意MladenJablanovićyou对于这个用例,一个块更好,但是由于你特别询问将方法作为参数传递给另一个方法,你可以使用'send'方法:

def track_time method, value
  begin_time = Time.now
  send method, value
  end_time = Time.now
  end_time - begin_time
end

def double(value)
    value + value
end

p trcak_time(:double, 5)

答案 1 :(得分:3)

不幸的是,Ruby中的方法不是第一类对象,因此它们不能直接作为参数传递。您可以传递方法的名称(通常作为符号传递),如其他答案所示。

但实现目标的惯用方法是docs

def track_time
  start = Time.now

  yield

  finish = Time.now
  finish - start
end

track_time do
  double(5)
end
#=> 6.127e-06

答案 2 :(得分:2)

请记住,end是Ruby中的保留字(我怀疑它无论如何都是为了说明目的)。

您可以传入函数名称的字符串/符号。

def track_time(function, input)
  start = Time.now

  method(function).call(input)

  finish = Time.now
  finish - start
end

def double(value)
  value + value
end

track_time('double', 5)
=> 6.127e-06