#ruby
#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. Отличная статья объясняет шаблон принуждения в Ruby Принуждение к классу в Ruby
Ответ №1:
Прочитайте статью в комментарии, 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
Если вы хотите выполнять арифметику только с логическими значениями, вы можете удалить условное выражение, но это может иметь побочные эффекты.