#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. Почему официальная документация описывает функции предварительного просмотра языка по умолчанию, не упоминая об этом, выходит за рамки моего понимания…