我正在练习我的 Ruby 元编程并尝试编写自己的循环方法来处理侦听套接字时的大部分丑陋,但让程序员有机会指定循环中断条件和之后要做的事情每个 IO.select/sleep 周期。
我希望能够写的是这样的:
x = 1
while_listening_until( x == 0 ) do
x = rand(10)
puts x
end
我能够做的是:
def while_listening_until( params, &block )
break_cond = params[ :condition ] || "false"
loop {
#other listening things are happening here
yield
break if params[:binding].eval( break_cond )
}
end
x = 1
while_listening_until( :condition => "x==0", :binding => binding() ) do
x = rand(10)
puts x
end
那么,我如何让所有这些eval
和束缚的丑陋消失?