是否有内置方法可以执行此操作:
value = value.is_a?(String) ? value.to_i : value
以下列形式:
value.apply_if!(:to_i, value.is_a?(String))
答案 0 :(得分:4)
不,没有内置方法,但您可以使用expression modifiers更简洁地编写它:
value = value.to_i if value.is_a?(String)
答案 1 :(得分:3)
如果您想确保value
是Integer
,则无论其类型如何,都可以致电to_i
:
value = value.to_i
123.to_i #=> 123
"123".to_i #=> 123
"foo".to_i #=> 0
您还可以使用Kernel::Integer
进行更严格的检查:
value = Integer(value)
Integer(123) #=> 123
Integer("123") #=> 123
Integer("foo") #=> ArgumentError
否则我更喜欢鸭子打字而不是类型检查:
value = value.some_method if value.respond_to?(:some_method)
在Rails中你可以使用:
value = value.try(:some_method) || value
答案 2 :(得分:1)
不,不幸的是,这是不可能的。您想通过调用变量上的方法来更改变量的绑定,但这是不可能的:变量不是对象,您不能在它们上调用方法。