我想实现一种将任何给定的 String 值转换为其正确表示形式的方法。以下是一些我所指的示例:
我相信这已经由我提供的代码解决了,尽管我对它的外观不太满意。我认为可以将其修改为更复杂的内容,但我的创造力已达到极限。
def convert(value)
return true if value =~ /^true$/i
return false if value =~ /^false$/i
return value unless value =~ /^[0-9]*$/
begin
Integer(value)
rescue ArgumentError
nil
end
end
我的问题本质上是:有没有一种方法可以提供相同的功能,但是返回语句更少,总体代码更少?
答案 0 :(得分:2)
通常,case
是多个if
的不错替代品。
def convert(str)
case str.downcase
when /\A[+-]?[0-9]+\z/
str.to_i
when 'true'
true
when 'false'
false
when ''
nil
else
str.clone
end
end
注意:当前仅支持十进制整数(问题中的代码也支持八进制,但未知是否是有意的)。如果需要由Integer(str)
,0
和/或0x
前缀表示的其他基数,请根据需要更改正则表达式(并切换回0b
)。
答案 1 :(得分:0)
YAML.load
可能适用于您的用例,但是它比您需要的功能更强大,并且在解析不可信数据时会带来安全漏洞。
它将很好地解析数字,布尔值和字符串,而且具有数组和哈希的语法,并且可以加载任意对象类型,这可能导致任意代码执行...