2014-10-18 60 views
0

我希望重複一個字的可選次數。但是,當我運行我的程序時,它似乎沒有超過input[1].times do lineRuby .join方法返回原始數組的長度而不是連接字符串的長度

CODE:

def repeat(*input) 
    sentence = [] 
    if input.length == 1 
     "#{input[0]} #{input[0]}" 
    else 
     input[1].times do 
      sentence.push(input[0]) 
      sentence.join(" ") 
     end 
    end 
end 

puts repeat("Hey!") 

puts repeat("Hey", 3) 

OUTPUT:

Hey! Hey! 
3 

回答

0

您需要返回的句子,你想加入這句話的時間循環之外。

def repeat(*input) 
    sentence = [] 
    if input.length == 1 
     "#{input[0]} #{input[0]}" 
    else 
     input[1].times do 
      sentence.push(input[0]) 
     end 
     sentence = sentence.join(" ") 
     return sentence 
    end 
end 
+0

啊!是的,非常感謝你,即使只是將「.join」方法從'.times'循環中移出來也行,因爲它應該返回最後一行。再次感謝! – scabbyjoe 2014-10-18 21:03:48

0

這裏是這樣做的一個小更緊湊的方式:

def say_hey(word, repeat=1) 
    puts ([word]*repeat).join(' ') 
end 

say_hey("Hey!") 
    #=> Hey! 
say_hey("Hey!", 14) 
    #=> Hey! Hey! Hey! Hey! Hey! Hey! Hey! Hey! Hey! Hey! Hey! Hey! Hey! Hey! 
+0

因此,如果沒有提供第二個參數,那麼向第二個參數添加一個值會創建一個默認值? – scabbyjoe 2014-10-18 22:32:07

+0

這是正確的。還要注意該方法的第一種形式[Array#*](http://www.ruby-doc.org/core-2.1.1/Array.html#method-i-2A)。 – 2014-10-18 22:43:17