新手问题 麻烦详解下面这段代码,不多,就两行

flea · 2012年10月25日 · 最后由 flea 回复于 2012年10月25日 · 2565 次阅读

2.times{Thread.new{10.times{|i| print i;$stdout.flush;Thread.pass}}}

Thread.list.each{ |thread| thread.join nless . thread==Thread.main}

运行结果是:00112233445566778899

第二句我懂,请详解第一句。

类似的还有个句子 10.times {Thread.new{10.times . { |i| print . i . ;$stdout.flush; sleep . rand (2)}}}

运行结果大约为:0010100001012121312242325453233433655467765888689675567…999

这两个句子都想了我一个早上了,还望前辈们不吝赐教。。。。谢过了,先。。

#2 楼 @leozwa 最近 goagent 用不了了,给得这两个连接点不开

楼主的代码真蛋疼,问问题以前,先把你的代码格式化一下呀。让大家好看点。

我不知道你在那里看到代码,很明显执行结果不是你说的那样,因为对 10 个数字迭代,太快了,Thread.pass 来不及执行完毕,迭代器已经返回。所以输出结果在我的电脑上总是: 01234567890123456789

改成下面这样才是你想要的结果:

thread1 = Thread.new{ 10.times {|i| print i;$stdout.flush; sleep(0.1); Thread.pass }}
thread2 = Thread.new{ 10.times {|i| print i;$stdout.flush; sleep(0.1); Thread.pass }}
thread1.join
thread2.join
# => 112233445566778899

回楼上:这个是《Begining Ruby:From novice to professional》(作 者:(美)库珀(Cooper,P.)著,仲田 等译)上的,可能是当时是 1.8 版本的,我在 1.9 上也得不出来,所以特意过来找前辈们闻一下子的。

需要 登录 后方可回复, 如果你还没有账号请 注册新账号