- finalfusion
- 7021
- 1
- 22
- 0
関数オーバーロードとか。RT @mametter: @kmizu ところで、静的型付けが動的型付けより表現力がある事例ってのは、implicit conversion を使う事例以外にはないんですかねえ。
2010-05-08 22:34:24それだとマルチメソッドじゃないですかね、言語で支援しても。その違いがどれだけ重要かっていうと、よくわかんないけど。RT @mametter: @yukihiro_matz kind_of? とかでディスパッチすればいいんじゃないですかね
2010-05-08 22:41:00aの型がSuperAである場合、a.fooはSuperA#fooを呼ぶべきだと思います。aの型がSubならSuberB#fooでいいけど。RT @kmizu: @mametter http://gist.github.com/394552 を見ていただくとたぶんわかると思います。
2010-05-08 22:44:11@yukihiro_matz まさにそうなるように作った例です。最初のa.fooはSuperAのインスタンスが入ってるのでSuperA#foo、二番目のはSubのインスタンスが入っていてSuperA#fooはfoo2にrenameされてるので、SuperB#fooが呼ばれる、と。
2010-05-08 22:51:28@kmizu いや、だから、(aの型がSuperAなら)二番目でSuperB#fooが呼ばれちゃダメだって。全然関係ないメソッドだから。呼ばれるとしたら言語設計が間違ってる。
2010-05-08 22:59:51@yukihiro_matz あ、いや、aの型はSubですよ。型宣言省略したから伝わって無かったみたいですが、変数の型宣言省略時の型=右辺の型、のつもりでした。つまり、こう。 http://gist.github.com/394552
2010-05-08 23:05:20@yukihiro_matz コメントのsubstitute Sub for SuperAってのは、コメントより上のコードのSuperAをSubに置き換えたら、その下のコードになる、という意図です。
2010-05-08 23:06:40だとすると私は問題ないと思うけど。静的型言語ではサブタイプの変数を通じた呼び出しは自由だと思ってるので。Liscovの論文にはどう書いてあるんですか。RT @kmizu: @yukihiro_matz あ、いや、aの型はSubですよ。型宣言省略したから伝わって無かったみたいですが
2010-05-08 23:19:54@yukihiro_matz Liskovの論文では、renaming mapみたいなのを用意して定式化してあって、(衝突があっても)普通に問題無い感じですね。
2010-05-08 23:23:39ん? Sub型の変数からfooを呼ぶと問題なくSuperB#fooが呼ばれるってことだよね。論文読めって話かもしれないけど。RT @kmizu: Liskovの論文では、renaming mapみたいなのを用意して定式化してあって、(衝突があっても)普通に問題無い感じですね。
2010-05-08 23:26:04@yukihiro_matz はい。そういうことです。>Sub型の変数からfooを呼ぶと問題なくSuperB#fooが呼ばれる
2010-05-08 23:32:33