要调用使用集合解构的 Nix 函数,您需要向它传递一个具有所需键的集合,不多也不少:
nix-repl> ({ a }: a) { a = 4; b = 5; }
error: anonymous function at (string):1:2 called with unexpected argument ‘b’, at (string):1:1
例外情况是函数的参数列表末尾包含省略号:
nix-repl> ({ a, ... }: a) { a = 4; b = 5; }
4
但是,nixpkgs中的大多数包都包含一个文件,该default.nix
文件包含一个未使用此省略号定义的函数。然而,不知何故,当您使用 时callPackage
,它设法调用这些函数并仅将它们需要的参数传递给它们。这是如何实施的?