to_int:如何将TrueClass强制转换为Fixnum

时间:2016-10-03 12:56:50

标签: ruby

我尝试像这样扩展布尔类:

class TrueClass def to_i() 1 end end
class TrueClass def to_int() 1 end end

class FalseClass def to_i() 0 end end
class FalseClass def to_int() 0 end end

1 * true仍会引发true can't be coerced into Fixnum

1 个答案:

答案 0 :(得分:1)

阅读the article in the comment tl; dr 将是:

class TrueClass
  def to_i
    1
  end

  def coerce(other)
    [other, other.is_a?(Numeric) ? to_i : self]
  end
end

1 * true # => 1

如果你只想用布尔值算术,你可以删除条件,但这可能有副作用。