【发布时间】:2017-09-06 19:48:27
【问题描述】:
要调用使用集合解构的 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 时,它设法调用这些函数并仅将它们需要的参数传递给它们。这是如何实现的?
【问题讨论】:
-
对于任何想知道
callPackage在哪里实现(以及如何找到 lambda 定义)的人,请参阅此答案:stackoverflow.com/a/56124590/1498178