Nix 表达式中的 AttributeSet 表达式

AttributeSet expression in Nix Expression

如果下面的nix表达式

let
  f = "f";
  o = "o";
  b = "b";
  func = {a ? f, b ? "a" , c ? ""}: a+b+c; #only modify this line!
in
rec {
  foo = func {b="o"; c=o;}; #must evaluate to "foo"
  bar = func {a=b; c="r";}; #must evaluate to "bar"
  foobar = func {a=foo;b=bar;}; #must evaluate to "foobar"
}
  1. 这里{a ? f, b ? "a" , c ? ""}: a+b+c;我们声明 函数将属性集 {a ? f, b ? "a" , c ? ""} 作为 参数。
  2. 此处func {b="o"; c=o;}我们将属性集({b="o"; c=o;})传递给 函数。

在第一个表达式中我们用“,”分隔属性集的键,在第二个表达式中用“,”分隔键。为了表示属性集,我们使用两种不同的方法。这个理解对吗?

语法 { param ? default }: x 定义了一个匿名函数,该函数采用带有可选属性 param 的属性集。

in the second "," is separating the keys.

在属性集中,您使用 ; 作为分隔符。我认为这是一个错字,因为你的例子是正确的。

您可以在 Nix manual 的函数定义中阅读有关“设置模式”的更多信息。

看来你的理解是正确的。