Rego中如何拼接两个字符串?自定义拼接函数返回结果错误如何解决
问题原因
- Rego 内置函数
concat的参数顺序使用错误,该函数的标准定义为concat(分隔符, 待拼接的字符串数组),返回值是将数组内所有字符串元素用指定分隔符拼接后的结果。 - 你原有代码中的写法
concat(bar, item)等价于用入参字符串"123"作为分隔符,拼接仅包含"f"一个元素的数组,最终返回结果是"f",和你预期的"123f"不一致,因此hello规则的判定结果为false。
正确实现方案
方案1:修正concat参数用法
调整参数顺序,指定分隔符为空字符串,待拼接数组包含入参和要追加的"f"即可:
concat_f(bar) = output { output := concat("", [bar, "f"]) }
无额外逻辑时可以直接简写为单条语句:
concat_f(bar) = concat("", [bar, "f"])
方案2:使用+运算符直接拼接(最简洁)
Rego 原生支持用+运算符直接拼接字符串,写法更直观:
concat_f(bar) = bar + "f"
方案3:使用sprintf格式化拼接
如果后续有更复杂的字符串格式化需求,可以用sprintf函数实现:
concat_f(bar) = sprintf("%s%s", [bar, "f"])
以上任意方案修改后,你原有hello规则的判定结果就会符合预期返回true。
内容的提问来源于stack exchange,提问作者Stack Overflow
相关产品推荐
相关产品推荐

