Ich versuche, etwas Rubin zu lernen. Stellen Sie sich vor, ich mache Schleifen und mache einen langen Prozess, und in diesem Prozess möchte ich einen Spinner so lange wie nötig erhalten.Unendliche Erträge von einem Iterator
So konnte ich tun:
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"
Aber ich dachte, es sauberer sein würde zu tun:
def spinChar
a=['|','/','-','\\']
a.cycle{|x| yield x}
end
# ... skip setup a big loop
print spinChar
# ... do next step of process
print "\b"
Natürlich ist der spinChar Anruf einen Block will. Wenn ich es blockiere, wird es auf unbestimmte Zeit hängen bleiben.
Wie kann ich nur das nächste Jahr dieses Blocks bekommen?
Generatoren sind schmerzhaft langsam. Ruby 1.9 hat Fasern, die ungefähr gleich schnell sind. – vava
http://StackOverflow.com/a/14894334/1698467 - welcher Name dieser Lösung? 'Spinnerverschluss'? – skywinder