私はルビーを学ぼうとしています。 私はループしていて長時間実行されているプロセスを実行しているとします。このプロセスでは、必要な時間だけスピナーを取得したいと考えています。イテレータからの無限の歩留まり
だから私は何ができる:
a=['|','/','-','\\']
aNow=0
# ... skip setup a big loop
print a[aNow]
aNow += 1
aNow = 0 if aNow == a.length
# ... do next step of process
print "\b"
しかし、私はそれを行うにはきれいだろうと思った。もちろん
def spinChar
a=['|','/','-','\\']
a.cycle{|x| yield x}
end
# ... skip setup a big loop
print spinChar
# ... do next step of process
print "\b"
spinCharコールがブロックを望んでいます。私はそれをブロックすると、無期限にハングアップします。
どうすればこのブロックの次のイールドを得ることができますか?
ジェネレータは痛いほど遅いです。 Ruby 1.9には、ほぼ同じで速くできるFibersがあります。 – vava
http://stackoverflow.com/a/14894334/1698467 - このソリューションの名前は何ですか? 「スピナー閉鎖」? – skywinder