2014-01-21 32 views
0

當I型我有一個整數數組,我需要轉換爲字符串

digicollect=[] 
digicollect[0]=2 

我得到2,當我在digicollect在IRB鍵入。

此外,當我鍵入

"Hello" * 2 

我得到 「HelloHello」

但是,如果我在

2 * "Hello" 

鍵入這是行不通的。

"hello" * digicollect 

不起作用。 但是

"hello" * digicollect[0] 

確實有效。

爲什麼?

+0

一個非常重要的標籤丟失。你使用哪種技術? – Sachin

+0

我在裏面使用命令提示符和irb。紅寶石版本2.0 – maudulus

回答

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 

在那裏,我們發現會發生什麼:

  • String ex pects整數。 (重複字符串的次數)
  • 數組需要整數或字符串。(重複x次數組或使用字符串連接)
  • Fixnum需要一個數字。 (對於簡單的乘法)

因此,當你寫"hello" * digicollect你試圖調用刺的繁殖方法,並傳遞一個數組,並且該方法根本不知道如何處理它(這將只接受整數),這就是爲什麼你會得到錯誤。

+0

我明白了。謝謝,這真的很有用。有沒有辦法看到建議? – maudulus

+0

我對你輸入的內容有些困惑「除了整數或字符串修補程序需要一個數字或整數外,字符串除外和整數數組」。除了你是否接受或期望? – maudulus

+0

對不起,我很着急,我的意思是期望(或接受)。 – hirolau

-1

digicollect本身不是數字,這就是爲什麼你不能'乘'它。它包含數字,這就是爲什麼「hello」* digicollect [0]有效。

至於2 *「你好」的情況,我認爲這是關於語言的一個語法 - 字符串必須先出現,整數秒。

+0

好吧,明白了。非常感謝:) – maudulus

0

我應該這樣說,我沒有得到2當我在irb中輸入digicollect ...我得到[2]。這是具有2的值這從整數值2

字符串沒有*操作者用於數組參數非常不同的單個元件陣列,和數量沒有*操作者與字符串參數。但是,字符串的數字參數爲*digicollect[0]訪問該數組元素的數值。

+0

好的謝謝!所以現在我想知道爲什麼如果我輸入「hello」*(digicollect [0] -5)它不會給我一個答案,只是「負面的論點」? – maudulus

+0

您不能將字符串乘以負數。例如,如果'digicollect [0]'是2,那麼你就減去5,得到-3。 – Darren

+0

OOOh,好的。謝謝! – maudulus

相關問題