nix - 如何显示在 nix 中定义函数的位置?

标签 nix

nix 中是否有任何方法可以检查函数的定义位置,以查看其源代码?

例如,我有函数 writeScript ,如何检查它来自哪里?

最佳答案

Nix 将在 lambda 术语的“描述”中报告它。我将在这里假设 Nix 2.0。

$ nix --version
nix (Nix) 2.0
$ nix repl '<nixpkgs>'
Welcome to Nix version 2.0. Type :? for help.

Loading '<nixpkgs>'...
Added 8606 variables.

nix-repl> writeScript
«lambda @ /nix/store/5m86fk1jw1pcrysckb6kam77jdxh3kgd-nixos-18.03.131802.4b4bbce199d/nixos/pkgs/build-support/trivial-builders.nix:57:17»

nix-repl> 

此位置有时可能与您期望的不同,因为它不会将您带到定义名称的位置,而是带您到实际 lambda 所在的位置。
nix-repl> map (x: x)
«primop-app»

nix-repl> l: map (x: x) l
«lambda @ (string):1:1»

为了简单性和性能,Nix 评估器不会为每个定义保留该信息。因此,有时您需要使用 grep 进行蛮力搜索。或类似。请注意,github 不会索引像 pkgs/top-level/all-packages.nix 这样的大文件。 .

关于nix - 如何显示在 nix 中定义函数的位置?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49783151/

相关文章:

haskell - 如何使用 haskell 堆栈创建一个 nix 包

尼克斯壳 : how to load environment variables from env file?

zsh - NixOS 之外的 Nix 配置

nix - 如何从源代码构建 Nix 包?

nix - 我可以使用不同版本的软件包启动 nix-shell 吗?

postgresql - 如何在 Nixos 上安装 postgresql-client/psql

haskell - 在 nix-shell 中找不到模块

nix - 有没有办法查看在 NixOS 上构建和激活的实际计算/生成的 "output"系统配置?

nix - nix 构建守护进程是否保留构建日志?

nix - 根据属性向 stdenv 添加 shell 函数