bogdan_uman
@bogdan_uman
шлЫмазл неукЪ-поцЪ

Добавить кавычки для строковой переменной?

Здравствуйте. У менять есть hash { tstr: 'sssss', tnbr: 10, tdate: Date.today } и нужно для строковых и даты оборачивать в кавычки. Что бы на выходе было "tstr = 'sssss',tnbr = 10,tdate = '2017-07-31'"

Вот вроде работает, но может есть лучше решение? Спасибо.
data = { tstr: 'sssss', tnbr: 10, tdate: Date.today }
puts data.map{ |k, v| "#{k} = #{ ['String', 'Date' ].include?( v.class.name ) ? "'#{ v }'" : v }" }.join( ',' )
  • Вопрос задан
  • 142 просмотра
Пригласить эксперта
Ответы на вопрос 1
Богдан, в целом ваше решение рабочее.
Но я не рекомендовал бы вам увлекаться «однострочниками».

# encoding: utf-8
# @see https://toster.ru/q/447239

require 'date'

# @param [Hash] source
# @return [String]
def main(source, equal = ' = ', separator = ', ', result = [])
  source.map do |key, value|
    case value
    when String, Date
      value = %Q('#{value}')
    when Fixnum, Bignum, Float
    else
      raise "Wrong class for #{value}"
    end
    result << "#{key}#{equal}#{value}"
  end

  result.join separator
end

# passed
# tstr='foo',tnbr=42,tdate='2017-12-18'
source = { tstr: 'foo', tnbr: 42, tdate: Date.today }
puts main source, '=', ','

# passed
# tstr = 'foo', tnbr = 42.42, tdate = '2017-12-18'
source = { tstr: 'foo', tnbr: 42.42, tdate: Date.today }
puts main source

# failed
source = { tstr: %w(foo), tnbr: 42, tdate: Date.today }
puts main source
Ответ написан
Комментировать
Ваш ответ на вопрос

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

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