*如果问题的措辞令人困惑,请道歉。我不知道该怎么问。
我该怎么办?
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)
目标是创建可重复的内容,以便跟踪不同功能需要多长时间才能完成。
答案 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