В Ruby кажется, что большую часть помощи coerce() можно выполнить с помощью
def coerce(something)
[self, something]
end
то есть, когда
3 + rational
требуется, Fixnum 3
не знает, как обрабатывать добавление Rational, поэтому он обращается за помощью к Rational#coerce, вызывая rational.coerce(3), и этот метод экземпляра coerce сообщит вызывающей стороне:
# I know how to handle rational + something, so I will return you the following:
[self, something]
# so that now you can invoke + on me, and I will deal with Fixnum to get an answer
Так что, если большинство операторов могут использовать этот метод, но не в ситуации (a - b) != (b - a)? Может ли coerce() знать, какой это оператор, и просто обрабатывать эти особые случаи, просто используя простой [self, something] для обработки всех других случаев, когда (a op b) == (b op a) ? (op — оператор).
coerce
, если я дал вам ответ на первый вопрос? - person Marc-André Lafortune   schedule 11.05.2010