2014-09-20 35 views
0
para = "do ray me fa so la te do." 
para.gsub!(' ', "#{sleep(2)}") 
$stdout.sync = true 

我想要在同一行上打印出來:(do ray me fa so so te te do)。下面顯示列,因爲「#」灰顯了整行。紅寶石逐字打印,間隔秒數

print para 
do#sleep(2) 
ray#sleep(2) 
me#sleep(2) 
fa#sleep(2) 
so#sleep(2) 
la#sleep(2) 
te#sleep(2) 
do#sleep(2) 

首先當我打電話時,首先出現「do」,然後暫停一下,然後在同一行顯示「ray」等。這可能嗎?作爲一個紅寶石學習者,他們說你不能「幹」。

謝謝!

+1

如果這是發生了什麼的只是一種緩慢的方式,那當然是有可能的。 – sawa 2014-09-20 08:17:59

+0

有人因爲我不知道的原因而投入這個工作。我不希望將整個字符串打印出來,而是希望它能夠通過文字打印出單詞,但只有幾秒的間隔。 – Sylar 2014-09-20 08:22:11

+1

我想你不知道你在做什麼。 'para.split('').each {| word |放詞;睡覺(2)}' – 2014-09-22 15:47:36

回答

1

我會做這樣的:

$stdout.sync = true 
paragraph = "do ray me fa so la te do." 

paragraph.split.each do |word| 
    print "#{word} " 
    sleep 2 
end 
+0

那沒話說。它將所有單詞擠在一起,並在顯示完整單詞之前暫停16秒。我想首先打印「do」,然後是「ray」等 – Sylar 2014-09-20 08:48:05

+0

@Sylar你是否在'ruby foo.rb'的命令行中運行這個小程序?比它應該工作。如果您在編輯器或IDE中運行腳本,則取決於該工具的設置。 – spickermann 2014-09-20 08:55:11

+0

好吧,現在可以工作,但我需要在單詞之間的空間。 – Sylar 2014-09-20 08:56:19

0

你在做什麼正在取代另一個字符串,其中包括一些Ruby代碼,但因爲它是會被轉義,它永遠不會被執行。

達到你想要我會建議嘗試這種方法是什麼:

"a b c d e f g".split(' ').each do |s| 
    puts s 
    sleep(1) 
end 

因此,對於每個字符串你想要第二個。

+0

不是每個字符串,而是一個字符串中的每個字。我想先「出現」,然後是「射線」等 – Sylar 2014-09-20 08:50:37

+0

@Sylar對不起,我不明白你想要什麼,如果你替換字符串,你會得到你想要的順序的字符串。 – 2014-09-22 13:15:23

0

這是什麼錯誤:

para.gsub!(' ', "#{sleep(2)}") 

此執行睡眠2,它什麼都不做了兩秒鐘,返回2.這是做para.gsub!(' ', 2)