【问题标题】:How to printf in jsonnet?如何在jsonnet中打印f?
【发布时间】:2018-04-09 22:21:23
【问题描述】:

有没有办法在 jsonnet 中打印对象?这主要用于调试目的。

我正在使用error 打印对象,但这会终止程序执行。

local obj = [
{
  myKey: 2,
}];
error 'Printing' + std.toString(obj)

输出:

RUNTIME ERROR: Printing[{"myKey": 2}]
    snippet:6:1-37  

有更好的方法吗?

【问题讨论】:

    标签: jsonnet


    【解决方案1】:

    为了跟进 Dave Cunningham 的回答 std.trace() is available since 0.11.0,它的行为类似于“中间的钩子”,其中第一个参数是您要显示的字符串,第二个是您要返回的字符串。

    将它用于提供的示例:

    $ cat foo.jsonnet
    local obj = [
    {
        myKey: 2,
    }];
    std.trace("obj content: %s" % [obj], obj)
    
    $ jsonnet foo.jsonnet 
    TRACE: foo.jsonnet:5 obj content: [{"myKey": 2}]
    [
       {
          "myKey": 2
       }
    ]
    

    【讨论】:

      【解决方案2】:

      对于后人,OP 很友好地贡献了一个新函数来解决这个问题:std.trace("message", rest)。

      【讨论】:

      • 你应该详细说明你的答案
      • @catchUp fyi 提供了一个示例,基于原始问题
      【解决方案3】:

      [已过时,查看其他答案]

      目前(截至 jsonnet 0.10)不幸的是没有。有计划将其包含在未来的版本中(此处发布:https://github.com/google/jsonnet/issues/130)。

      人们使用错误(就像您在代码中显示的那样)或修改代码以仅输出他们想要的部分(它的方便程度取决于您如何构建代码)。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多