Я хотел сделать что-то подобное, но, к сожалению, это невозможно в Ruby.
Единственные два объекта, которые имеют логическое значение false, это false
и nil
. Несколько недель назад у меня была дискуссия в интернет-чате (IRC) с Brixen , одним из главных разработчиков Rubinius, и он объяснил это довольно хорошо. Насколько я понимаю, когда Ruby решает, является ли объект истинным или нет, он НЕ вызывает какие-либо методы (то есть отправляет какие-либо сообщения) объекту, он просто смотрит на указатель на объект, чтобы увидеть, является ли указатель сам по себе. равно ложь или ноль. Поскольку он не вызывает никаких методов для объекта, вы не можете изменить поведение.
Лучшее, что вы можете сделать, это что-то вроде этого:
p = A.probability()
puts p # => 0.3
if p.to_bool
puts 'success'
else
puts 'failure'
end