2017-10-04 7 views
0

rspecテストに合格するには、単純な文字列を取得してnum回数を返す必要があります。私はグーグルで行ってきましたし、.timesメソッドが役立つはずです。私が見ることのできる理論から:Rubyの.timesメソッドは出力の代わりに変数を返します

num = 2 
string = "hello" 

num.times do 
    string 
end 

...すべきことはありますか?しかし、出力は "2"、または "num"が等しいものとして返され続けます。私は "hello 'を2回置くことができますが、" hellohello "を印刷した後も" 2 "を返します。

はまた

num.times { string } 

を試してみました私はここで、.times方法についての基本的な何かが足りないのですか?あるいは、私はこの別の方法について行くべきですか?

+3

'times'方法を繰り返し' num'時間コードのブロックを呼び出す - それは「倍」(乗算)演算子ではありません。そのためには '*'を使用します。 '' hello "* 2#=>" hellohello "' – mikej

答えて

3

timesブロックの実行を繰り返します:stringは2回解釈されますが、値は何も使用されません。 num.timesnumを返します。あなたは、Rubyコンソールでそれを確認することができます。

string = "hello" 
string + string 
# "hellohello" 
string + string + string 
# "hellohellohello" 

それとも数字と同じように、あなたは複数の追加を避けるために、乗算を使用することができます:あなたはループを必要としない

> 2.times{ puts "hello" } 
hello 
hello 
=> 2 

、あなたは連結を必要とします:あなたは2つのstring要素を持つリストが必要な場合は

string * 3 
# "hellohellohello" 
num = 2 
string * num 
# "hellohello" 

、あなたが使用することができます。

[string] * num 
# ["hello", "hello"] 

または

Array.new(num) { string } 
# ["hello", "hello"] 

あなたが真ん中にスペースを含む文字列に参加したい場合は:ちょうど楽しみのために

Array.new(num, string).join(' ') 
# "hello hello" 

を、あなたも使用できます。

[string] * num * " " 

をが、それはおそらく本当に読みにくいです。

0

これはあなたが探している現象ですか?

def repeat(count, text) 
    text * count 
end 

repeat(2, "hello") # => "hellohello" 

(NOステップが悪い入力を防御するために取られなかった)

+0

本質的に、はい。私は、ここでの多くの答えは、.timesのようなループを使うことは、過度のコンプリートであったかもしれないことを示していると思います。 – oheydrew

関連する問題