3
可能性の重複:OCamlの3.12.0で
Two fields of two records have same label in OCamlレコードラベルはグローバルに一意である必要がありますか?
、それは、レコードのいずれかのラベルがグローバルにユニークな名前を持っている必要がありますか?
type foo = { a : int; b : char; }
# type bar = {a : int; b : string};;
type bar = { a : int; b : string; }
# {a=3; b='a'};;
{a=3; b='a'};;
Error: This expression has type char but an expression was expected of type
string
私はレコードが匿名で作成された場合、コンパイラのための唯一の方法はレコード名である私が参照してるタイプを知っていると思います。 bar
はfoo
と表示されていますか?
、ありがとう!興味のある人のために、私はcamlp4ベースの[構文の拡張子](https://github.com/alavrik/piqi/tree/master/piqi-camlp4)を書いて少しきれいにしました。基本的には、次のように書くことができます: 'Foo#{a = 3; b = 'a'} '。違いは、すべてのネストされたFooでも機能するということです。 – alavrik
「let open ... in」は、この文脈でも非常に便利です。 '' let foo'を 'f = {a = 3; b = 'a'} '。 – alavrik
@AntonLavrik:「オープン」についてのヒントをありがとう。本当に役に立ちます。 – pad