Карта.изменение не определено

#dictionary #f#

#словарь #f#

Вопрос:

Я пытаюсь вызвать Map.change функцию. Это четко определено в документации, но у меня это просто не работает. Я пытался открывать разные пространства имен (например, FSharp.Core , Microsoft.FSharp.Collections ), но безуспешно.

 open FSharp.Collections

[<EntryPoint>]
let main argv =
    let testMap = Map.empty.Add("test", true).Add("otherTest", false)

    let newTestMap = 
        testMap 
        |> Map.change // Here's the error!
                "otherTest" 
                (fun v -> 
                    match v with
                    | Some b -> Some (not b)
                    | None -> None )

    printf(newTestMap)
    0
  

При попытке запустить приведенный выше пример кода я получаю следующую ошибку:

error FS0039: The value, constructor, namespace or type 'change' is not defined.

Как мне использовать Map.change ?

Ответ №1:

Ваш код работает (кроме printf ). Возможно, проверьте свою версию F # или .NET (Core). Пространство имен коллекций не обязательно должно быть открытым.

 let testMap = Map.empty.Add("test", true).Add("otherTest", false)

let newTestMap = 
    testMap 
    |> Map.change // Here's the error!
            "otherTest" 
            (fun v -> 
                match v with
                | Some b -> Some (not b)
                | None -> None )

printf "%A" newTestMap // map [("otherTest", true); ("test", true)]val it : unit = ()
  

Карта.изменение

Комментарии:

1. Моя версия dotnet была 3.1.402 , версия F # : 4.7 . После обновления до 3.1.403 (который также поставляется с F # 4.7 ) Я все еще получаю ту же ошибку, dotnet build сбой… Какова ваша версия dotnet ?

2. Хорошо, я попытался запустить тот же код dotnet fsi — здесь я получаю предупреждение Experimental library feature, requires '--langversion:preview'. This warning can be disabled using '--nowarn:57' or '#nowarn "57"'. . Когда я запускаю код, dotnet fsi --langversion:preview все работает нормально. Спасибо! P.S. Почему официальная документация описывает функции предварительного просмотра языка по умолчанию, не упоминая об этом, выходит за рамки моего понимания…