Ruby .times方法返回变量而不是输出

时间:2017-10-04 07:15:14

标签: ruby methods rspec iteration

为了通过一个rspec测试,我需要得到一个简单的字符串来返回" num"次数。我一直在谷歌搜索,似乎.times方法应该有所帮助。理论上我可以看到:

num = 2
string = "hello"

num.times do
  string
end

......应该有用吗?但输出继续作为" 2"或其他任何" num"等于。我可以把它放到" put'你好'"两次,但它仍然返回" 2"印刷之后" hellohello"。

也试过

num.times { string }

我错过了关于.times方法的基本信息吗?或者我应该采取另一种方式?

2 个答案:

答案 0 :(得分:3)

times将重复执行该块:string将被解释两次,但该值不会被用于任何事情。 num.times将返回num。您可以在Ruby控制台中查看它:

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

你不需要循环,你需要连接:

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

或者就像数字一样,您可以使用乘法来避免多次添加:

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

如果您需要包含2个string元素的列表,可以使用:

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

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

如果你想加入中间有空格的字符串:

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

只是为了好玩,你也可以使用:

[string] * num * " "

但它可能不太可读。

答案 1 :(得分:0)

这是您正在寻找的行为吗?

def repeat(count, text)
  text * count
end

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

(没有采取措施防止输入错误)