首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在一个简单的例子中解释了Nix/NixOS中的循环依赖关系

在一个简单的例子中解释了Nix/NixOS中的循环依赖关系
EN

Stack Overflow用户
提问于 2015-07-12 14:07:17
回答 2查看 470关注 0票数 4

这里它写在第1点:

该文件定义了一组属性,所有这些属性都是具体的派生(即,不是函数)。实际上,我们定义了一个相互递归的属性集,,即属性可以相互引用。这正是我们想要的,因为我们希望将不同的包“插入”到彼此之间。

这似乎有点难以理解。

例如,如果derivation A依赖于derivation B,而derivation B依赖于derivation A,那么在Nix/NixOS中构建的这种相互递归的派生子是如何实现的呢?

请给出一个简单的例子,,为什么这种相互递归的派生不会导致问题?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-07-15 12:56:31

如果A依赖于B,反之亦然,则它是循环依赖关系,Nix无法处理这一点。

但相互递归集是另一回事。它只意味着A可以依赖同一组的B:

代码语言:javascript
复制
rec {
  a = 1;
  b = 2;
  c = a+b;
}

正如jhegedus所说,它相当于(因为懒惰):

代码语言:javascript
复制
let s = with s; {
  a = 1;
  b = 2;
  c = a+b;
};
in s

但这是一个循环,不起作用:

代码语言:javascript
复制
rec {
  a = b;
  b = a;
}
票数 7
EN

Stack Overflow用户

发布于 2015-07-12 14:13:37

无论如何,我都会发这篇文章,因为它不仅仅是什么都没有,它可能会对某人有所帮助:

在第1点:http://nixos.org/nix/manual/#ex-hello-composition中,它被写成:“我们定义了一个相互递归的属性集”,这有点让人困惑。这不会导致鸡蛋问题吗?

joco42_说,包1依赖于包2,而包2依赖于包1,这不是一个问题吗?

joco42_这种循环依赖真的存在于nix中吗?

克米库,不,这不是个问题

带Nix http://augustss.blogspot.hu/2011/05/more-points-for-lazy-evaluation-in.html的kmicu m

joco42_ kmicu:非常感谢

kmicu http://nixos.org/nix/manual/#sec-constructs

joco42_ kmicu:非常感谢,在我看到您的评论在一个简单的例子中解释了Nix/NixOS中的循环依赖关系之前,我刚刚在sof上问过这个问题

joco42_ kmicu:那么基本上nix表达式是用一种懒惰的语言编写的吗?

kmicu是的,“Nix表达式语言是一种纯粹的、懒惰的、功能性的语言。

(在http://lethalman.blogspot.com/2014/11/nix-pill-17-nixpkgs-overriding-packages.html也有一个例子)

基本上是,nix语言可以处理递归,因为它很懒:

代码语言:javascript
复制
nix-repl> fix=f : let r= f r ; in r

nix-repl> p= s: { a=3;b=4; c=s.a+s.b;}

nix-repl> fix p
{ a = 3; b = 4; c = 7; }
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31368647

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档