다음을 통해 공유


레코드 식 복사 및 업데이트

복사 및 업데이트 레코드 식은 기존 레코드를 복사하고, 지정된 필드를 업데이트하고, 업데이트된 레코드를 반환하는 식입니다.

구문

{ 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 |}

이러한 유연성을 통해 일반 레코드 또는 익명 레코드로 작업하든 동일한 간결한 구문이 적용됩니다.

참고 항목