Nix: синтаксис nixlang, как изменить существующий набор? Синтаксическая ошибка неожиданная '=', ожидается $ end - PullRequest
0 голосов
/ 21 января 2020
nix repl
nix-repl> test = {"a"=10;}
nix-repl> test.a
nix-repl> 10
nix-repl> test.a=20
error: syntax error, unexpected '=' , expecting $end, at (string):1:7

Ожидаемый результат:

test = {"a"=20;}

В настоящее время я изучаю nix и не смог найти ответ через несколько минут в Google. Это кажется довольно простым, и я уверен, что кто-то сразу это знает.

1 Ответ

2 голосов
/ 21 января 2020

Значения в nix неизменны; Вы не можете изменить значение test.a, потому что это потребует изменения набора. Вы можете создать только новый набор с другим значением a.

nix-repl> test = {"a"=10;}

nix-repl> test // {"a"=20;}
{ a = 20; }

nix-repl> test
{ a = 10; }

nix-repl> test2 = test // {"a"=20;}

nix-repl> test2
{ a = 20; }

Оператор // объединяет два набора со значениями справа, переопределяя значения на левый.

nix-repl> {"a"=10; "b"=20;} // {"a"="changed"; c="30";}
{ a = "changed"; b = 20; c = "30"; }
...