레코드 식 복사 및 업데이트
복사 및 업데이트 레코드 식은 기존 레코드를 복사하고, 지정된 필드를 업데이트하고, 업데이트된 레코드를 반환하는 식입니다.
구문
{ record-name with
updated-labels }
{| anonymous-record-name with
updated-labels |}
설명
레코드 및 익명 레코드는 기본적으로 변경할 수 없으므로 기존 레코드를 업데이트할 수 없습니다. 업데이트된 레코드를 만들려면 레코드의 모든 필드를 다시 지정해야 합니다. 이 작업을 간소화하기 위해 복사 및 업데이트 식을 사용할 수 있습니다. 이 식은 기존 레코드를 사용하고 식에서 지정된 필드와 식에 지정된 누락된 필드를 사용하여 동일한 형식의 새 레코드를 만듭니다.
이는 기존 레코드를 복사하고 일부 필드 값을 변경해야 하는 경우에 유용할 수 있습니다.
예를 들어 새로 만든 레코드를 사용합니다.
let myRecord2 =
{ MyRecord.X = 1
MyRecord.Y = 2
MyRecord.Z = 3 }
해당 레코드에서 두 필드만 업데이트하려면 복사 및 업데이트 레코드 식을 사용할 수 있습니다.
let myRecord3 = { myRecord2 with Y = 100; Z = 2 }
중첩 레코드 복사 및 업데이트
F# 7.0 이상 에서는 중첩된 레코드 필드에 대한 업데이트를 지원하도록 복사 및 업데이트 식 이 향상되었습니다. 이 기능을 사용하면 깊이 중첩된 레코드로 작업할 때 보다 간결한 구문을 사용할 수 있습니다.
다음 예시를 참조하세요.
이전
type SteeringWheel = { Type: string }
type CarInterior = { Steering: SteeringWheel; Seats: int }
type Car = { Interior: CarInterior; ExteriorColor: string option }
let beforeThisFeature x =
{ x with Interior = { x.Interior with
Steering = {x.Interior.Steering with Type = "yoke"}
Seats = 5
}
}
이후
새 기능을 사용하면 점 표기법을 사용하여 중첩 필드에 도달하고 직접 업데이트할 수 있습니다.
let withTheFeature x =
{ x with Interior.Steering.Type = "yoke"; Interior.Seats = 5 }
이 구문은 여러 with
식이 필요하지 않습니다. 대신 중첩된 필드에 대한 업데이트를 직접 지정하는 동시에 동일한 식에서 여러 필드(다른 중첩 수준)를 업데이트할 수 있도록 허용합니다.
익명 레코드
익명 레코드에도 동일한 구문 확장이 작동합니다. 또한 이 구문을 사용하여 일반 레코드를 익명 레코드로 복사하고 업데이트하여 프로세스에 새 필드를 추가할 수 있습니다.
let updatedRecord =
{| originalRecord with
Interior.Seats = 4;
Price = 35000 |}
이러한 유연성을 통해 일반 레코드 또는 익명 레코드로 작업하든 동일한 간결한 구문이 적용됩니다.
참고 항목
.NET