F#で複数の継承レベルをモデル化する推奨される方法はありますか?識別された共用体を使用した複数レベルの継承のモデリング
C#で、次のようなもの取る:私はF#でこれをやった
class Expr { }
class SourceExpr : Expr { }
class JoinExpr : SourceExpr { }
class TableExpr : SourceExpr { }
を:
type SourceExpr =
| Join of JoinExpr
| Table of TableExpr
type Expr =
| Source of SourceExpr
| ...
は、より良い方法はありますか?これは継承と同じ多型性を提供しますか?
私はパーサーに取り組んでいます。だから、DUは正しい選択だと思います。しかし、他人から継承しているような表現があります。両方のソースであるJoinまたはTableを受け入れる関数があります。 Exprを受け入れる関数もありますが、Sourceは多くのオプションの1つです。私はOOの言葉でそれを考えることはできませんが、同じ種類の多態的な振る舞いを維持しながらこの比較的静的な階層をモデル化するより良い方法があるのだろうかと思います。 – Daniel
型でモデリングするとうまくいくでしょう。 「同じ」ものでもある2つのタイプがある場合は、それらを区別して使用する新しいタイプを追加します。唯一の欠点は、より多くの解体をしなければならないということです。しかし、パターンマッチングとアクティブパターンが必要な場所では、かなり許容できます。私はかなり複雑な再帰型とFParsecパーサーでこれをやっています。 –