0
중첩 된 레코드로 기능 업데이트 구문 { record with key = value }
을 사용하려면 ppx 확장 또는 유사 기능을 사용하는 방법이 있습니까?중첩 된 레코드로 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 구문)과 같이 쓸 수 있도록하고 싶습니다 : 나는 당신이 사용하고있는 가정
{ item with b = { item.b with c = 0.8 } }
: 당신은 바로 OCaml의이 쓸 수
let() = ignore { item with b.c = 0.8 }
어떤 의미에서 대답은 "아니오"인 것처럼 보입니다. '{key = value}를 가진 레코드 '에서'key'처럼 들린다는 것은 오직 하나의 필드 일 뿐이며'key'-position에서 더 많은 종류의 것들을 허용하는 일반적으로 사용되는 확장은 없습니다 ... 아마도 이런 기능을 여러 가지 기능으로 업데이트 할 수 있습니다. –
예, 곧장 OCaml의 문법은'with' 뒤에 * field *를 요구합니다. 이것은 (레코드 유형이 정의 된) 모듈을 포함하는 이름 앞에 붙는 단일 식별자입니다. –