2017-09-24 2 views
0

PPTの拡張機能などを使用して、機能の更新構文{ record with key = value }をネストされたレコードで使用する方法はありますか?OCaml関数の更新でネストされたレコード

たとえば、次の例のプログラムでは、「内側の」ターゲットを実際にターゲットにしたいとき、最も外側のレコードのみを機能的に更新しています。

type outer = { 
    a : float; 
    b : inner 
} 
and inner = { 
    c : float; 
} 

let item = { a = 0.4; b = { c = 0.7 } } 

let() = ignore { item with b = { c = 0.8 } 

innerに複数のフィールドがあるとあまり便利ではありません。

私は、次の(strawman構文)のようなものを書くことができるようにしたいと思います:

let() = ignore { item with b.c = 0.8 } 

答えて

1

あなたはストレートのOCamlでこれを書くことができます。

{ item with b = { item.b with c = 0.8 } } 

私はあなたが使用していると仮定例のためだけにignore;機能的なレコード更新の結果を無視するのは意味がありません。

+0

ある意味では、答えは「いいえ」と思われます。 '{key with value} 'の' key'のように聞こえるのは、単一のフィールドだけで、 'key'の位置にもっと多くの種類のものを許可する一般的な拡張はありません...おそらくこのような複数の機能的な更新を行うことができます。 –

+0

はい、ストレートOCamlの文法では、 'with'の後に*フィールド*が必要です。これは、(レコードタイプが定義されている)モジュールを含む名前の前に単一の識別子がある可能性があります。 –

関連する問題