首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在Nix中,我如何重构这个配置?

在Nix中,我如何重构这个配置?
EN

Stack Overflow用户
提问于 2018-08-26 14:44:28
回答 1查看 85关注 0票数 0

所以我和NixOS的家庭经理一起管理我的点文件。我的一个文档里有这样的东西:

代码语言:javascript
复制
my_color0   = ${xrdb:color0}
my_color1   = ${xrdb:color1}
my_color2   = ${xrdb:color2}
my_color3   = ${xrdb:color3}
my_color4   = ${xrdb:color4}
my_color5   = ${xrdb:color5}
my_color6   = ${xrdb:color6}
my_color7   = ${xrdb:color7}
my_color8   = ${xrdb:color8}
my_color9   = ${xrdb:color9}
my_color10  = ${xrdb:color10}
my_color11  = ${xrdb:color11}
my_color12  = ${xrdb:color12}
my_color13  = ${xrdb:color13}
my_color14  = ${xrdb:color14}
my_color15  = ${xrdb:color15}

由于Nix是功能性的,我想一定有一种简单的方法可以使它更加干燥。我似乎找不到一个类似于Python的range(0, 16)的函数。我想有一种方法可以在某种模板上绘制地图。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-08-26 18:22:08

这是可以做到的。Nixpkgs中的lib属性有很多函数,这些函数有时会派上用场。

我对你的例子有点担心,因为将它重写为一个算法在我看来没有任何价值。我将假设这样的解决方案确实在您的实际问题中提供了价值。

下面是一个小nix repl会话,提供了一个解决方案:

代码语言:javascript
复制
~ $ nix repl '<nixpkgs>'
Welcome to Nix version 2.0.4. Type :? for help.

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

nix-repl> :p lib.concatMapStringsSep "\n" (i: "my_color${toString i} = \${xrdb:color${toString i}}") (lib.range 0 15)   
"my_color0 = ${xrdb:color0}\nmy_color1 = ${xrdb:color1}\nmy_color2 = ${xrdb:color2}\nmy_color3 = ${xrdb:color3}\nmy_color4 = ${xrdb:color4}\nmy_color5 = ${xrdb:color5}\nmy_color6 = ${xrdb:color6}\nmy_color7 = ${xrdb:color7}\nmy_color8 = ${xrdb:color8}\nmy_color9 = ${xrdb:color9}\nmy_color10 = ${xrdb:color10}\nmy_color11 = ${xrdb:color11}\nmy_color12 = ${xrdb:color12}\nmy_color13 = ${xrdb:color13}\nmy_color14 = ${xrdb:color14}\nmy_color15 = ${xrdb:color15}"

'<nixpkgs>'参数从nixpkgs加载NIX_PATH中的所有属性。

:p命令减少了对值的打印,但在这里并不是真正必要的,因为字符串不能被部分计算。在处理吸引集时,您可能需要使用:p

其他有用的函数包括lib.concatStringsSepmap

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52027351

复制
相关文章

相似问题

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