私は過去にSMLで少し仕事をしましたが、今はもっと興味深い部分に着手し始めています。SML:構造体の実装を隠すためにabstypeを使用し、シグネチャを使用することの違いは何ですか?
abstype...with...end
コンストラクタを使用すると、実装の詳細を隠しておくことができます。また、作成したいものの署名を作成し、:>
演算子を使用して、そのシグネチャを守って実装の詳細を隠した構造にすることもできます。
署名/構造体は、abstypeのより一般的なバージョンではありませんか?署名/構造ではできない偽造物で私は何ができますか?なぜ私はabstypeを使いたいのですか?
ありがとうございました!一例として、
:私が今までabstypeを使用したいと思うのはなぜ
signature SET = sig
type set
val empty: set
val insert: int * set -> set
val member: int * set -> bool
end
structure Set :> SET = struct
type set = int list
val empty = []
fun insert(x, s) = x::s
fun member(x, []) = false
| member(x, h::t) = (x = h) orelse member(x, t)
end
は、少なくともとして強力な
abstype AbsSet = absset of int list with
val empty = absset([])
fun insert(x, absset(s)) = absset(x::s)
fun member(x, absset([])) = false
| member(x, absset(h::t)) = (x = h) orelse member(x, absset(t))
end
として
今すぐリンクが修正されました。 :) –
モジュールでできないabstypeで(少なくとも普通のSML'97で)できる唯一のことは、抽象型を '' let''の中でローカルに定義していることです。しかし、それは誰もが燃え尽きる必要性を感じたことではありません... –