jq 中无限包含循环。两个模块相互需要,其中一个模块需要第三个

问题描述 投票:0回答:1

我有 2 个模块可以将代码转换为字符串, module1.jq 和 module2.jq

module1 转换具有这种形式的 obj1 的代码 { "code1":"254", "Object2s":[ {Object2}, {Object2} ] }

module2 转换具有这种形式的 obj2 的代码 { "code1":"574", "Object1s":[ {Object1}, {Object1} ] }

正如你所看到的,两个对象相互包含,所以在 module1 中它将是一个语句 包括“模块2”; 在 module2 中会有一条语句 包括“模块1”;

使用任一模块时,您都会遇到无限循环。

module3.jq 包括“模块1”;

如何阻止这种情况发生?

任何帮助将不胜感激

我尝试为每个模块定义唯一的变量类型,然后像 在 module1.jq 中 $模块_模块1 = 1; 如果 $module_module2 == 0 则包含“module2”;

在模块2中 $module_module2 = 1; 如果 $module_module1 == 0 则包含“module1”;

但是没有成功。

include jq infinite
1个回答
0
投票
  1. 无法检测循环性是一个(众所周知的?)限制(或错误);也许您愿意对 C 和 Go 实现提出增强请求?

  2. include 指令的语法不提供条件。

C 和 Go 实现之间也存在一些差异。 值得注意的是:

  • 如果 a-mod.jq 包含
    b-mod
    并定义
    a
    (例如
    def a: "a";
    ),并且
  • 如果 b-mod.jq 包含
    a-mod
  • 如果 b.jq 包含
    b-mod
    并调用
    a

然后 gojq 按预期处理情况,但 C 实现给出了编译错误(运行 b.jq 会产生“a/0 未定义”)。


总而言之:至少现在, 除了提出增强请求和提交错误报告之外,似乎最好不要对模块系统抱有太多期望。

© www.soinside.com 2019 - 2024. All rights reserved.