gpt4 book ai didi

nix - 为什么 Nix lambdas 和 ?运营商这样互动?

转载 作者:行者123 更新时间:2023-12-04 00:53:39 32 4
gpt4 key购买 nike

在试用 nix 和 nix repl 时:

Welcome to Nix version 2.3.6. Type :? for help.

nix-repl> pkgs = import <nixpkgs> {}

nix-repl> builtins.typeOf pkgs
"set"

nix-repl> pkgs ? "firefox"
true

nix-repl> func = (n: pkgs ? "firefox")

nix-repl> func null
true

nix-repl> func = (n: pkgs ? n)

nix-repl> func "firefox"
false

我假设 func "firefox" 会返回 true

什么 Nix 范例或概念解释了为什么 func "firefox" 在此示例中返回 false

最佳答案

你在 ? 之后写的不是一个表达式:它是一个属性路径。这允许你做一些强大的事情,比如 pkgs ? hello.src 探测 pkgs 是否有一个名为 hello 的属性,它有一个名为 src 的属性。

当 Nix 评估 a 时? b,Nix 只看名称“b”,它不考虑“b”是否是本地上下文中的变量。所以 pkgs ? n 为真,前提是 pkgs 是一个集合,其成员的字面意思是“n”。

这是一个探讨该问题的示例 repl session 。最后一行显示了我认为您正在尝试做的事情的可能解决方案。

nix-repl> pkgs = import <nixpkgs> {}
nix-repl> pkgs ? "firefox"
true
nix-repl> pkgs ? "name"
false
nix-repl> name = "firefox"
nix-repl> pkgs ? name
false
nix-repl> firefox = "name"
nix-repl> pkgs ? firefox
true
nix-repl> pkgs ? "${name}"
true
nix-repl> builtins.hasAttr name pkgs
true

关于nix - 为什么 Nix lambdas 和 ?运营商这样互动?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64392566/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com