Если вы хотите реализовать свой собственный тип номера, вы должны внедрить coerce
:
class N
def coerce(other)
return N.new(other), self
end
end
n = N.new
1 <=> n # => -1
Все встроенные типы номеров Ruby в базовой библиотеке, все типы номеров в стандартной библиотеке, а также все сторонние типы номеров используют протокол coerce
для поиска общего типа, чтобы сделать такие операторы, как +
, *
и ==
коммутативно и -
, /
и <=>
симметрично.
Мне не совсем понятно, какой должна быть семантика N
, поэтому приведенная выше реализация является лишь примером.