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"
}
- 这里
{a ? f, b ? "a" , c ? ""}: a+b+c;
我们声明
函数将属性集 {a ? f, b ? "a" , c ? ""}
作为
参数。
- 此处
func {b="o"; c=o;}
我们将属性集({b="o"; c=o;}
)传递给
函数。
在第一个表达式中我们用“,”分隔属性集的键,在第二个表达式中用“,”分隔键。为了表示属性集,我们使用两种不同的方法。这个理解对吗?
语法 { param ? default }: x
定义了一个匿名函数,该函数采用带有可选属性 param
的属性集。
in the second "," is separating the keys.
在属性集中,您使用 ;
作为分隔符。我认为这是一个错字,因为你的例子是正确的。
您可以在 Nix manual 的函数定义中阅读有关“设置模式”的更多信息。
看来你的理解是正确的。
如果下面的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"
}
- 这里
{a ? f, b ? "a" , c ? ""}: a+b+c;
我们声明 函数将属性集{a ? f, b ? "a" , c ? ""}
作为 参数。 - 此处
func {b="o"; c=o;}
我们将属性集({b="o"; c=o;}
)传递给 函数。
在第一个表达式中我们用“,”分隔属性集的键,在第二个表达式中用“,”分隔键。为了表示属性集,我们使用两种不同的方法。这个理解对吗?
语法 { param ? default }: x
定义了一个匿名函数,该函数采用带有可选属性 param
的属性集。
in the second "," is separating the keys.
在属性集中,您使用 ;
作为分隔符。我认为这是一个错字,因为你的例子是正确的。
您可以在 Nix manual 的函数定义中阅读有关“设置模式”的更多信息。
看来你的理解是正确的。