2016-07-19 4 views
4

でローカル型を持つことは可能です。は、それは例えば、特定の機能</p> <p>内のみアクセス可能であるタイプは、私はいくつかのデータを取りたいと言う、それをフォーマットし、JSONにそれをシリアル化することができます私が意味する地元の種類によってはF#

let parse data = // hypothetical scenario 
    type Record = { root : string[] } 
    let record = { root = data } 
    JsonConvert.SerializeObject record 

他の場所ではタイプが必要ないため、これが機能するはずです。しかし、私はこれを書くときにコンパイルエラーが発生します。

F#で同様の機能を利用する方法はありますか?

+0

オブジェクトの表現 - https://msdn.microsoft.com/en-us/visualfsharpdocs/conceptual/object-expressions-%5Bfsharp%5Dは類似しています –

+1

@JohnPalmerこれらは匿名ですか?これを使うときに多型のものの能力を失ってはいけませんか? – t3dodson

+2

'private'アクセス修飾子を使用すると、あなたの型がそのモジュールからのみアクセスできるようになります。 – bytebuster

答えて

4

F#は、関数スコープ内の型宣言をサポートしていません。

これはモジュールを定義し、モジュールに地元のタイプを維持することですし、あなたが得ることができる最も近い:あなたは別のモジュールにあなたのシリアル化コードを入れた場合

module MyLogic = 
    type private LocalType = {root: string []} 
    let serialize data = 
     let record = {root = data} 
     JsonConvert.SerializeObject record 

、あなたはにプライベートあなたのタイプを保つことができますモジュールはprivate修飾子を使用します。これは、シリアライゼーション機能のローカルにもなります。単一の機能ではなく、合理的に近いです。

さらに、実際に動作させるためには、レコードにDataContract属性も必要であると思います。

関連する問題

 関連する問題