2010-04-14 64 views
2

如果您已經看到我以前的問題,那麼在Ruby中,您已經知道我是一個大型的nuby。所以,我發現這個網站是用於C編程的,但我認爲無論在C語言中能做什麼,在Ruby中都必須是可能的(並且更易讀)。Ruby:計數器,計數和遞增

挑戰是打印出一堆數字。我發現了這個漂亮的方法.upto()和我使用了一個塊(並且實際上理解了它的用途)。但是,在IRB中,我得到了一些意想不到的行爲。

class MyCounter 
    def run 
    1.upto(10) { |x| print x.to_s + " " } 
    end 
end 


irb(main):033:0> q = MyCounter.new 
=> #<MyCounter:0x5dca0> 
irb(main):034:0> q.run 
1 2 3 4 5 6 7 8 9 10 => 1 

我不知道=> 1的來源:S我應該這樣做嗎?我期待有這樣的結果:

1 2 3 4 5 6 7 8 9 10 

謝謝你的回答,評論和反饋!

+0

你爲什麼不嘗試其意在Ruby的網站嗎? – OscarRyz 2010-04-14 23:39:20

+2

奧斯卡·雷耶斯爲什麼不停止發帖? – 2010-04-14 23:44:36

+0

這個網站非常好,我可以閱讀C代碼,只要它不夠瘋狂。此外,它看起來很復古。 – Shyam 2010-04-14 23:48:26

回答

2

我不知道在哪裏了=> 1來自

別擔心。默認情況下,irb將打印方法執行的返回值。

即使您沒有編寫return語句(比如在C中),Ruby將返回上一個計算語句的值。

在這種情況下,它是1

就是這樣。

例如嘗試:

class WhereIsTheReturn 
    def uh? 
     14 * 3 # no return keyword 
    end 
end 


whereIsIt = WhereIsTheReturn.new 
hereItIs = whereIsIt.uh? 
print "Here it is : #{hereItIs}\n" 
3

「=> 1」來自IRB,而不是您的代碼。在您輸入IRB的每個語句後,它會在「=>」提示符後打印該語句的結果。

嘗試打印在函數換行:

def run 
    1.upto(10) { |x| print x.to_s + " " } 
    print "\n" 
end 

然後,它會是這樣的:

irb> q.run 
1 2 3 4 5 6 7 8 9 10 
    => nil 
+0

非常感謝! – Shyam 2010-04-14 23:45:57

+0

@jeremy:它實際上會顯示'=> nil'這是執行:'print「的結果\ n」'我已經修改了您的答案以反映這一點。 – OscarRyz 2010-04-14 23:47:52

+0

不客氣@Shyam,謝謝@Oscar ......顯然我沒有真正地測試過它:P – 2010-04-15 00:03:33