Добавление к карте как атрибута в записи f # - PullRequest
0 голосов
/ 21 октября 2018

У меня есть этот тип:

type Model = {Ships: map<Mmsi, Ship>}
type Ship = {Latitude: float Longitude: float Speed: float Heading: float}

Я пытаюсь найти способ добавить на карту корабля с помощью сообщения типа

type msg = {Latitude: float Longitude: float Mmsi = int Time = string}

Используя эту функцию:

let update (msg : Msg) (currentModel : Model) : Model =
    // TODO: implement the new model based on the received message here
    let currentModel = 
        { 
            Ships = Map.Add(msg.Mmsi, msgToShip msg)
        }
    currentModel

Однако я получаю сообщение об ошибке от компилятора как таковое: «Метод или конструктор объекта« Добавить »не является статичным.

Я не особенно разбираюсь в f #или функциональное программирование в целом, поэтому любые указания на это будут наиболее цениться.

1 Ответ

0 голосов
/ 21 октября 2018

С заглавной буквы Add - это метод экземпляра типа Map<_, _>.Нижний регистр add - это функция в модуле Map.Итак, вы хотели позвонить сюда:

Ships = Map.add msg.Mmsi (msgToShip msg) currentModel.Ships

Или, также допустимо, но менее идиоматично:

Ships = currentModel.Ships.Add(msg.Mmsi, msgToShip msg)
...