У меня есть массив d = ['foo', 'bar', 'baz']
, и я хочу собрать его элементы в строку, ограниченную ,
и and
в последнем элементе, чтобы он стал foo, bar and baz
.
Вот что я пытаюсь сделать:
s = ''
d.each_with_index { |x,i|
s << x
s << i < d.length - 1? i == d.length - 2 ? ' and ' : ', ' : ''
}
, но интерпретатор выдает ошибку:
`<': comparison of String with 2 failed (ArgumentError)
Однако это работаетс +=
вместо <<
, но Ruby Cookbook говорит, что:
Если для вас важна эффективность, не создавайте новую строку, когда вы можете добавлять элементы в существующую строку.[И так далее] ... Вместо этого используйте str << var1 << ' ' << var2
.
Возможно ли в этом случае без +=
?
Кроме того, должен быть более элегантный способ сделать это, чем приведенный выше код.