#f#
#f#
Вопрос:
(Совершенно новичок).
Пожалуйста, предположите следующее в F#
module Visit =
type Model =
{ Name: string }
module Cell =
type Model =
{ Visit: Visit.Model option }
module Column =
type Model =
{ AppointmentCount: int
InnerRows: Cell.Model list }
module App =
...stuff with List.tryFind to return an open column ...
let AddVisit (c:Column.Model, v:Visit) =
{ c with c.InnerRows[AppointmentCount] = { c.InnerRows[AppointmentCount] with Visit = v } }
Предполагая, что в столбце будет 4 ячейки, посещение предоставляется при чтении базы данных, а экземпляр столбца находится через пару List.tryFind, может ли вложенная запись (т. Е. Посещение ячейки) быть заменена / обновлена с помощью AppointmentCount в качестве индекса?
То есть это не удается:
let AddVisit (c:Column.Model, v:Visit) =
{ c with c.InnerRows[AppointmentCount] = { c.InnerRows[AppointmentCount] with Visit = v } }
Ошибка: привязки полей должны иметь вид ‘id = expr,’
Спасибо.
Ответ №1:
Возьмем, к примеру, недавно созданную запись.
let myRecord2 = { MyRecord.X = 1; MyRecord.Y = 2; MyRecord.Z = 3 }
Чтобы обновить только два поля в этой записи, вы можете использовать выражение копировать и обновлять запись:
let myRecord3 = { myRecord2 with Y = 100; Z = 2 }
Комментарии:
1. Извините… Как будет записан индекс во вложенную запись?
Ответ №2:
let AddVisit (c:Column.Model, v:Visit) =
{ c.InnerRows.[c.AppointmentCount] with Visit = Some v }
Обратите внимание, что c.InnerRows.[c.AppointmentCount] указывает конкретную ячейку.модель, для которой будет установлено посещение. (Кроме того, «.» перед [ допускает прямое индексирование в список.