digicollect=[]
digicollect[0]=2
我得到2,當我在digicollect在IRB鍵入。
此外,當我鍵入
"Hello" * 2
我得到 「HelloHello」
但是,如果我在
2 * "Hello"
鍵入這是行不通的。
"hello" * digicollect
不起作用。 但是
"hello" * digicollect[0]
確實有效。
爲什麼?
digicollect=[]
digicollect[0]=2
我得到2,當我在digicollect在IRB鍵入。
此外,當我鍵入
"Hello" * 2
我得到 「HelloHello」
但是,如果我在
2 * "Hello"
鍵入這是行不通的。
"hello" * digicollect
不起作用。 但是
"hello" * digicollect[0]
確實有效。
爲什麼?
Ruby中的一切都是一個對象,甚至乘法只是方法調用。
"Hello" * 2
相同"Hello".*(2)
所以,當你得到一個錯誤,你應該問自己:左側真的有乘法方法,並將它接受右邊作爲參數?
digicollect = []
digicollect[0] = 2
讓我們檢查,我們有什麼樣的對象:
p digicollect.class #=> Array
p digicollect[0].class #=> Fixnum
p 2.class #=> Fixnum
p "Hello".class #=> String
現在,如果我們進入文檔爲* - 方法,我們發現了每個班預計:
http://ruby-doc.org/core-2.1.0/String.html#method-i-2A
http://ruby-doc.org/core-2.1.0/Array.html#method-i-2A
http://ruby-doc.org/core-2.1.0/Fixnum.html#method-i-2A
在那裏,我們發現會發生什麼:
因此,當你寫"hello" * digicollect
你試圖調用刺的繁殖方法,並傳遞一個數組,並且該方法根本不知道如何處理它(這將只接受整數),這就是爲什麼你會得到錯誤。
digicollect本身不是數字,這就是爲什麼你不能'乘'它。它包含數字,這就是爲什麼「hello」* digicollect [0]有效。
至於2 *「你好」的情況,我認爲這是關於語言的一個語法 - 字符串必須先出現,整數秒。
好吧,明白了。非常感謝:) – maudulus
我應該這樣說,我沒有得到2
當我在irb中輸入digicollect
...我得到[2]
。這是具有2的值這從整數值2
字符串沒有*
操作者用於數組參數非常不同的單個元件陣列,和數量沒有*
操作者與字符串參數。但是,字符串的數字參數爲*
,digicollect[0]
訪問該數組元素的數值。
一個非常重要的標籤丟失。你使用哪種技術? – Sachin
我在裏面使用命令提示符和irb。紅寶石版本2.0 – maudulus