代码之家  ›  专栏  ›  技术社区  ›  George

Nix表达式中语句的理解困难

nix
  •  1
  • George  · 技术社区  · 8 年前

    从…起 Section 12.5 of Nix Pills :

    注意在buildInputs中使用with表达式以避免重复pkg

    let
      pkgs = import <nixpkgs> {};
      mkDerivation = import ./autotools.nix pkgs;
    in mkDerivation {
      name = "graphviz";
      src = ./graphviz-2.38.0.tar.gz;
      buildInputs = with pkgs; [ gd fontconfig libjpeg bzip2 ];
    }
    

    为什么是 with pkgs 在中的代码段末尾需要 buildInputs pkgs 已通过 let 顶部装订?

    1 回复  |  直到 8 年前
        1
  •  2
  •   Emmanuel Rosa    8 年前

    pkgs 在范围内,但这不会自动将其属性放入范围。

    gd , fontconfig ... 如果你摔倒了 with pkgs 然后是 buildInputs

    buildInputs = with pkgs; [ gd fontconfig libjpeg bzip2 ];
    
    buildInputs = [ pkgs.gd pkgs.fontconfig pkgs.libjpeg pkgs.bzip2 ];
    

    下面是另一个语义相同的示例:

    let
      pkgs = import <nixpkgs> {};
      mkDerivation = import ./autotools.nix pkgs;
      gd = pkgs.gd;
      fontconfig = pkgs.fontconfig;
      libjpeg = pkgs.libjpeg;
      bzip2 = pkgs.bzip2;
    in mkDerivation {
      name = "graphviz";
      src = ./graphviz-2.38.0.tar.gz;
      buildInputs = [ gd fontconfig libjpeg bzip2 ];
    }
    

    在最后一个例子中, gd公司 , 字体配置 ... 在第一部分中被纳入范围 let 构建输入 带包装 .

    带包装 正在做。