我不确定Ruby中C风格回调的最佳习惯用法是什么——或者是否有更好的习惯用法(而不像C).在C语言中,我会这样做:
void DoStuff( int parameter, CallbackPtr callback )
{
// Do stuff
...
// Notify we're done
callback( status_code )
}
什么是好的Ruby类似功能?本质上,我想在"DoStuff"中满足某个条件时调用传入的类方法
我不确定Ruby中C风格回调的最佳习惯用法是什么——或者是否有更好的习惯用法(而不像C).在C语言中,我会这样做:
void DoStuff( int parameter, CallbackPtr callback )
{
// Do stuff
...
// Notify we're done
callback( status_code )
}
什么是好的Ruby类似功能?本质上,我想在"DoStuff"中满足某个条件时调用传入的类方法
ruby的类似功能(不是惯用语)是:
def my_callback(a, b, c, status_code)
puts "did stuff with #{a}, #{b}, #{c} and got #{status_code}"
end
def do_stuff(a, b, c, callback)
sum = a + b + c
callback.call(a, b, c, sum)
end
def main
a = 1
b = 2
c = 3
do_stuff(a, b, c, method(:my_callback))
end
惯用的方法是传递一个块,而不是对一个方法的引用.与独立方法相比,块的一个优点是上下文——块是closure,因此它可以引用声明它的范围中的变量.这减少了do_stuff需要传递给回调的参数数量.例如:
def do_stuff(a, b, c, &block)
sum = a + b + c
yield sum
end
def main
a = 1
b = 2
c = 3
do_stuff(a, b, c) { |status_code|
puts "did stuff with #{a}, #{b}, #{c} and got #{status_code}"
}
end