W.I.S. Laboratory
menu-bar

Rust


Rustで動的ポリモーフィズムのようなことをしてみる(その2)

前回やってみたのは、トレイトを1つ親に持って複数の構造体を作り、そのすべてにオーバーライドしたい関数もしたくない関数(要するに共通処理)もimplしてしまおうという方法だった。
ただこの方法だとどうしてもオーバーライド不要な共通処理まであちこちに書くことになり、後のデバッグが大変そうだ。
そこで今回は、共通処理の部分を単純な関数にして、構造体をトレイト型にキャストしたものを引数としてみた。
ちゃんと呼び出せるので、処理は共通化に成功だ。
しかしこれをするとフィールドにアクセスできなくなってしまう。(トレイトにはフィールドが無いので当然そうなる)
ただ、フィールドそのものが構造体から消えてしまうわけではなく、implしたメソッドからはアクセスできるので、Publicにしたいフィールドにアクセサメソッドを追加した。
なんかObjective-CとかSmalTalkみたいな感じになってしまったが、同じ処理をすべての構造体にimplするよりはメンテナンス性が良いかなと思う。
ただRustらしさがなくなり、格好は非常に悪い。
こういうことがしたいなら素直にオブジェクト指向型言語を使うのが吉だ。(結論)


[ 戻る ]
saluteweb