0

我想创建以下文本:

"text0text1text2text3text4text5"

所以我尝试用 来做.times,但是我需要一个辅助变量来保存金额,因为.times返回它被执行的次数。

我可以这样做:

(0..5).inject(''){|a,b| a+"text#{b}"}
 => "text0text1text2text3text4text5"

但是我觉得这段代码应该更简单。

那么,我必须完成哪些可读的替代方案?

4

2 回答 2

3

请注意,要拥有从0to的数字范围,5您将需要一个6-times循环,而不是5.

您不需要任何辅助变量:

6.times do |i|
    print "text#{i}"
end

会工作得很好。该Integer#times方法将块执行的次数传递给附加0n-1。该类Fixnum 甚至没有(从 2.0 开始)times方法。


谢谢。[...]。但是,我不想打印文本,我想创建一个字符串。

那么最简单的方法是使用::new构造函数方法Array来创建一个临时的5字符串数组,然后将它们连接在一起:

string = Array.new(6) { |i| "text#{i}" }.join
于 2013-04-17T15:02:24.943 回答
1

最佳答案在@LeeJarvis 的评论中

5.times.map { |x| "text#{x}" }.join
于 2013-05-14T11:45:20.863 回答