Aby wywołać funkcję Nix, który wykorzystuje zestaw destructuring, należy przekazać go do zestawu z dokładnie klucze Wymaga ona, nie więcej i nie mniej:Jak zdefiniowane są funkcje wywoływania "callPackage" Nixa bez elipsy?
nix-repl> ({ a }: a) { a = 4; b = 5; }
error: anonymous function at (string):1:2 called with unexpected argument ‘b’, at (string):1:1
Wyjątkiem od tej zasady jest sytuacja, gdy argumentu funkcyjnego wykaz zawiera elipsę w końcu:
nix-repl> ({ a, ... }: a) { a = 4; b = 5; }
4
jednak większość z pakietów w nixpkgs składać pliku default.nix
zawierającego funkcję, która nie jest zdefiniowane w tej elipsy. Jednak, kiedy używasz callPackage
, udaje się wywoływać te funkcje i przekazywać im tylko te argumenty, których potrzebują. W jaki sposób jest to realizowane?