ruby – 来自迭代器的无限收益

我正在努力学习一些ruby.
想象一下,我正在循环并执行一个长时间运行的过程,在这个过程中,我想在必要时获得一个微调器.

所以我能做到:

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的 yield不能像你的例子那样工作.但这可能是 closure的好地方:

def spinner()
  state = ['|','/','-','\\']
  return proc { state.push(state.shift)[0] }
end

spin = spinner

# start working
print spin.call
# more work
print spin.call
# etc...

在实践中,我认为这个解决方案对于它自己的好处可能过于“聪明”,但无论如何理解Procs的想法都是有用的.

相关文章
相关标签/搜索