Dunaevlad
@Dunaevlad

Как более лаконично написать линию кода с puts?

def manual(event)
    if event['BK1_name'].eql?('win')
      puts event['BK1_name'], event['BK1_bet'], event['BK1_game'], event['BK1_cf'], event['BK1_href']
    else
      puts  event['BK2_name'], event['BK2_bet'], event['BK2_game'], event['BK2_cf'], event['BK2_href']
    end

    print 'Press `Enter` to continue: '
    gets
  end


Мне кажется, что puts фигачить в длину не совсем нормально, но иначе мне выдает Rubocop, что метод содержит много строк. Как вообще принято писать в Руби, длинные строки это норм?
В Python строка должна быть короткой +-
  • Вопрос задан
  • 73 просмотра
Решения вопроса 1
@tin_vsl
Senior Developer
в ruby тоже есть необходимость соблюдать длину строк, но обычно это не такое маленькое значение, если rubocop на вас не ругается, то скорее всего нарушения нет

один вариант записать короче прямым способом (близким к вашему)
puts event.values_at(%w(BK1_name BK1_bet BK1_game BK1_cf BK1_href))


другой вариант записать короче более изощренным способом
def manual(event)
  prefix = event['BK1_name'].eql?('win') ? 'BK1' : 'BK2'
  keys = %w(name bet game cf href).map {|key| "#{prefix}_#{key}" }
  puts event.values_at(*keys)
  print 'Press `Enter` to continue: '
  gets
end
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
ENTRIES = %w[name bet game cf href]
# заполним произвольными данными
events = ENTRIES.each_with_object({}) {|name, h| h["BK1_#{name}"] = rand(10)}
p ENTRIES.map {|entry| "BK1_#{entry}"}
puts *ENTRIES.map {|entry| events["BK1_#{entry}"]}

дальше сам
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы