Chciałbym w jakiś sposób zdefiniować powiązane rekordy. Na przykład,Zapisz zmiany w F #
type Thing = { field1: string; field2: float }
type ThingRecord = { field1: string; field2: float; id: int; created: DateTime }
lub
type UserProfile = { username: string; name: string; address: string }
type NewUserReq = { username: string; name: string; address: string; password: string }
type UserRecord = { username: string; name: string; address: string; encryptedPwd: string; salt: string }
wraz ze sposobem konwersji z jednego do drugiego, bez konieczności pisania tyle boilerplate. Nawet pierwszy przykład w całości byłoby:
type Thing =
{ field1: string
field2: float }
with
member this.toThingRecord(id, created) =
{ field1 = this.field1
field2 = this.field2
id = id
created = created } : ThingRecord
and ThingRecord =
{ field1: string
field2: float
id: int
created: DateTime }
with
member this.toThing() =
{ field1 = this.field1
field2 = this.field2 } : Thing
Jak dostać się do field10
etc, to staje się odpowiedzialnością.
Obecnie robię to w niebezpieczny (i powolny) sposób za pomocą refleksji.
Dodałem prośbę o rozszerzenie składni with
w celu zapisania definicji na uservoice, co wypełniłoby tę potrzebę.
Ale czy istnieje już sposób, aby to zrobić? Może z dostawcami typów?
Bummer, planowałem zrobić to w przyszłym tygodniu, jeśli nikt nie ma istniejącego rozwiązania, ale (zaskakujący) fakt, że dostawcy typu nie obsługują typów rekordów nieco zabija ten pomysł. –
Cóż, jeśli masz dwa tygodnie, zawsze możesz zacząć od tego, że dostawca typu emituje typy rekordów;) – scrwtp
Całkowicie chętny, ale oszczędzaj mi kilka dni: od czego zacząć? –