ruby - упростить многократное объединение строк - PullRequest
10 голосов
/ 05 июля 2010

s - строка, это кажется очень скучным - как я могу упростить это?:

   if x === 2
      z = s
    elsif x === 3
      z = s+s
    elsif x === 4
      z = s+s+s
    elsif x === 5
      z = s+s+s+s
    elsif x === 6
      z = s+s+s+s+s

Спасибо

Ответы [ 4 ]

22 голосов
/ 05 июля 2010

Что-то вроде этого самое простое и работает ( как видно на ideone.com ):

puts 'Hello' * 3   # HelloHelloHello

s = 'Go'
x = 4
z = s * (x - 1)
puts z             # GoGoGo

API ссылки

ruby-doc.org - String: str * integer => new_str

Копировать - возвращает новый String, содержащий целое число копий получателя.

"Ho! " * 3   #=> "Ho! Ho! Ho! "
2 голосов
/ 05 июля 2010
z=''
(x-1).times do
 z+=s
end
1 голос
/ 12 июня 2014

Например, для рейтинговой системы до 5 звезд вы можете использовать что-то вроде этого:

def rating_to_star(rating)
   'star' * rating.to_i + 'empty_star' * (5 - rating.to_i)
end
1 голос
/ 05 июля 2010

Псевдокод (не рубин)

if 1 < int(x) < 7  then
   z = (x-1)*s
...