我正在尝试学习一些红宝石。
想象一下,我正在循环并执行一个长时间运行的过程,在这个过程中,我希望获得一个旋转器,只要需要就可以。
所以我可以这样做:
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's yield http://www.rubycentral.com/pickaxe/tut_containers.html#UD不按照您的示例希望的方式工作。但这可能是一个好地方closure http://www.rubycentral.com/pickaxe/tut_containers.html#UG:
def spinner()
state = ['|','/','-','\\']
return proc { state.push(state.shift)[0] }
end
spin = spinner
# start working
print spin.call
# more work
print spin.call
# etc...
在实践中,我认为这个解决方案对其本身来说可能过于“聪明”,但理解这个想法Proc http://www.rubycentral.com/pickaxe/ref_c_proc.html无论如何,s 可能会有用。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)