要调用一个使用set解构的Nix函数,你需要传递一个含有准确所需键的set,不能多也不能少:
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
时,它会调用这些函数并传递它们所需的参数。这是如何实现的呢?
callPackage
实现在哪里(以及如何找到 lambda 定义)的人,请参见此答案:https://dev59.com/QrPma4cB1Zd3GeqPw9na#56124590 - toraritte