如果条件,请应用方法

时间:2014-09-16 09:01:14

标签: ruby-on-rails ruby

是否有内置方法可以执行此操作:

value = value.is_a?(String) ? value.to_i : value

以下列形式:

value.apply_if!(:to_i, value.is_a?(String))

3 个答案:

答案 0 :(得分:4)

不,没有内置方法,但您可以使用expression modifiers更简洁地编写它:

value = value.to_i if value.is_a?(String)

答案 1 :(得分:3)

如果您想确保valueInteger,则无论其类型如何,都可以致电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)

不,不幸的是,这是不可能的。您想通过调用变量上的方法来更改变量的绑定,但这是不可能的:变量不是对象,您不能在它们上调用方法。