является перегрузкой оператора на самом деле полиморфизмом или перегрузкой параметров?
Верно ли, что полиморфизм обычно относится к разным классам, отвечающим на одно и то же «сообщение» (имя метода) и выполняющим разные действия, поэтому
bird.give_sound()
и
car.give_sound()
могут делать разные вещи. А перегрузка параметров - это больше о том, чтобы говорить об одном и том же классе, делать разные вещи, когда параметры, отправленные вместе с сообщением (имя метода), отличаются. Итак,
bird.give_sound()
и
bird.give_sound(:frighten_sound)
могут быть разными.
Значит, перегрузка операторов - это строго перегрузка параметров? вот так:
"foo" + "bar"
"foo" + 3
по крайней мере в Ruby, он отправляет сообщение +
в строку, содержащую foo
, первая строка отправляет со строкой параметров, вторая отправляет параметр 3 , и +
делают несколько разные вещи, но это тот же класс приемника String
В следующем примере это полиморфизм:
"foo" + 3
1 + 3
, потому что +
message вызывает разные методы разных классов, но использует одно и то же имя сообщения +
. Значит, в этих двух случаях это полиморфизм, а не перегрузка оператора?
Верно ли и верно ли сказанное выше? Есть ли что-то, что можно было бы добавить или исправить выше?