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

时间:2018-04-11 19:35:05

标签: nix

在nix中有没有办法检查函数的定义,看看它的源代码?

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

1 个答案:

答案 0 :(得分:2)

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等大文件编制索引。