【问题标题】:AttributeSet expression in Nix ExpressionNix 表达式中的 AttributeSet 表达式
【发布时间】:2021-07-30 08:53:54
【问题描述】:

如果下面的 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;}) 传递给 功能。

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

【问题讨论】:

    标签: nix nixos


    【解决方案1】:

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

    在第二个“,”中是分隔键。

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

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

    您的理解似乎是正确的。

    【讨论】:

      猜你喜欢
      • 2019-11-22
      • 2020-02-03
      • 2019-11-17
      • 2017-11-28
      • 1970-01-01
      • 1970-01-01
      • 2021-07-17
      • 1970-01-01
      • 2012-07-17
      相关资源
      最近更新 更多