如何将 std.prune() 与函数一起使用?

How to use std.prune() with a function?

我有一个函数需要一个必需参数和两个可选参数。如果未提供可选参数,我希望该函数从结果中删除可选参数,但它的计算结果为空表达式。

我的函数:

local newTaskParam(pName, pDesc=null, pDef=null) = {
    local param = std.prune(
        {
            name: pName,
            description: pDesc,
            default: pDef,
        },
    )
};
{
    test: newTaskParam("pipeline-debug"),
}

当前输出:

{
   "test": { }
}

预期输出:

{
   "test": {
      "name": "pipeline-debug"
   }
}

问题是您返回一个空对象:

local func() = {
  // expected here to return field: value pairs
};

为了您的目的,最简单的方法应该是返回调用 std.prune() 而无需 自己“构建”返回的对象的结果:

local func() = std.prune(
);

因此,您可以将其实现为:

local newTaskParam(pName, pDesc=null, pDef=null) = std.prune(
  {
    name: pName,
    description: pDesc,
    default: pDef,
  }
);
{
  test: newTaskParam('pipeline-debug'),
}