wikipediaのポリモーフィズムの項について自分なりに考えた

今日Twitterを見てたら、こんな発言が

wikipediaポリモーフィズムのところの話だ。

そういえば、あんまりしっかり見たことなかったなあと思ってみてみると「ん?」って感じの記述が

プログラミング言語の各要素(定数、変数、式、オブジェクト、関数、メソッドなど)についてそれらが複数の型に属することを許すという性質を指す。

これはちょっと違うような気がする。


ポリモーフィズムはある任意の入力に対して、出力が一意に決定するセットを各要素が複数持つことを許容する、ってことだと思います(思いますっていうのはあくまで自分の考えではそうということです)。
wikipediaの上記の記述だと「ある任意を入力に対して、複数パターンの出力を有する」と解釈することもできます(若干曲解のようにも見えますが…)

ここで問題になるのは「入出力のセット」ってどういう定義なのかということですね。僕なりの解釈では「ある型の入力に対して出力の型が一意に決まる」だと思います。

しかしよく考えれば動的片付け系ではこういうことできちゃいますね。たとえばRubyだったらこういうのかけますよね

hogeメソッドはintを引数として数値型と文字列型の2パターンの返り値の型をセットしています(実際こんなメソッドのパターン使うことあるのかどうかはさておき)。さらにperlなんかでは型という概念が希薄なので、ある入力にたいしていろいろなオブジェクト(というかリファレント)を渡せますし。
と、ここまで書いてて「Rubyだったらすべての基底クラスとしてobject型があるんだからもとは言えば全部オブジェクト型の派生が返ってくるんだから厳密には型は一意に決まってるんじゃないか」とか思い始めました。んーよくわからん