2
次のコードは、F#の保護変数と公開変数の違いをシミュレートしていますか?または私は何かを逃していますか?プロテクト/パブリック変数F#のクロージャー
let (=?) (d:Dictionary<'a,'b>) (x:'a) = d.TryGetValue(x)
let psi (f:'a -> 'b) (d:Dictionary<'a,'b>) = // public dictionary
let lambda (x:'a) =
match (d =? x) with
| true, i -> i
| false, _ -> d.Add(x,f x)
f x
lambda
let mem (f:'a -> 'b) = // protected dictionary
let d = new Dictionary<'a,'b>()
let orize (input:'a) =
match (d =? input) with
| true, i -> i
| false, _ -> d.Add(input,f input)
f input
orize
明確化が優れています。
しかし、保護された変数と公開された変数とはまったく同じものではありませんか? これらはスコープを変更する形容詞です。そして、理論によれば、私はF#ですべてのC#をシミュレートすることができなければならないし、逆もまた同様である。 – cdonlan
は "module"の本質的に別の単語ですが、今回は「モジュール」レベルのすべての要素がプライベートではなく公開されていますか? – cdonlan
アクセス修飾子の点では、あなたの例は 'public/private'値に近いです。これらのキーワードは、[F#で利用可能]です(http://msdn.microsoft.com/en-us/library/dd233188.aspx)。 'protected'キーワードは継承に関連しており、それは別の話です。 – pad