- プログラミング言語 Rust
359 :デフォルトの名無しさん[sage]:2015/07/21(火) 21:00:10.36 ID:Nw2FJ/oz - 論文の5ページの図は菱形継承とは関係無い
むしろ親クラスと子クラスの2階層でも問題があることを示してる 具体的には親クラス同士の連携のために親クラスに連携用のメソッドを追加する必要があること その連携用のメソッドを子クラスで実装しなければならないことが書かれている Rustが名前の衝突を許すせいで分かりづらいけど名前の衝突を避ければ>>346は trait FooA { fn foo(&self) { self.FooA_bar1(); self.FooA_bar2(); } fn FooA_bar1(&self); fn FooA_bar2(&self); } となってミックスインする時にFooA_bar1を呼んだらbar1を呼ぶように実装することになる 名前を同じにしようがtrait FooA: Barにしようが実装の数は変わらない そしてこの連携のための実装は再利用が出来ない >>348でこの問題の解決方法として>>339を挙げてるからそれを指摘した 別に>>339のエラーを多重継承のせいにしたつもりはない 確かに論文ではトレイト間の階層構造に意味が無いことは書かれていたけど 同時にトレイトはクラスの階層構造に影響しないとも書いてあったはず クラスとトレイト間では階層構造を作るという解釈はどこから来た? ここで2階層になってるからさっきの多重継承の問題が出てきた
|
|