Я хочу, чтобы разобрать строки следующим образом:Как анализировать строки в своих типах данных?
"1.0" # => 1.0 (Float)
"1" # => 1 (FixNum)
"hello" # => "hello" (String)
"true" # => true (TrueClass)
"false" # => false (FalseClass)
У меня есть следующий код:
def parse_value(val)
raise ArgumentError, "value must be a string" unless val.is_a? String
if val.to_i.to_s == val
val.to_i
elsif val.to_f.to_s == val
val.to_f
elsif val == 'true'
true
elsif val == 'false'
false
else
val
end
end
Это делает то, что нужно, но это кажется ужасным и неэффективным. Какой был бы лучший способ сделать это?
Существует простой элегантный способ сделать то, что вы хотите с помощью метода 'е ** L'. Но я не решаюсь написать этот ответ, потому что в stackoverflow слишком много глупых пользователей, которые наверняка откажут такой ответ. – sawa
@sawa Eval не будет работать для всех этих входов ('' hello "') –
@SergioTulentsev Я пропустил это. Ты прав. На самом деле вопрос ОП неясен в этом вопросе. Как это приводит к строке? Когда это невозможно интерпретировать иначе? Если это так, это означает, что вы не можете иметь строку '' true '' и т. Д. – sawa