【问题标题】:How to do string interpolation on the content of a string variable OR How to evaluate an expression embedded in a string如何对字符串变量的内容进行字符串插值或如何计算嵌入字符串中的表达式
【发布时间】:2022-12-16 06:04:32
【问题描述】:

我知道可以使用 $"{expression}" 将表达式嵌入字符串中,PowerFX 将计算表达式并将结果插入字符串中。

Set(Result, $"Answer is {12 + 2}");
// Result = "Answer is 14"

我想将这种字符串插值应用于包含表达式语法的字符串变量。例如:

Set(Template, "Answer is {12+2}");
Set(Result, $ExpressionString);
// Result is "Answer is 14"

目标是从带有占位符的数据源中读取模板字符串,然后插入引用的字段或表达式的值。

我正在尝试从 StringBuilder 操作复制 Nintex Workflow“嵌入变量”函数。

自己“艰难地”完成它所需的语法超出了我的范围。就像是:

  • 使用正则表达式查找模板字符串中“(?<placeholder>{(?<expression>[^}]*)})”的所有实例。
    • MatchAll() 将返回匹配表
  • 迭代匹配并创建/更改结果字符串
    • 计算<表达式>的值[1]
    • 从模板中删除 <placeholder>
    • 在模板中插入<表达式>的值

[1]这是我最迷失的部分。在其他语言中,可能有一个“exec(expression)”函数,每个人都认为这是一件可怕的事情,并且在误用时会引入漏洞。

【问题讨论】:

    标签: powerapps powerapps-canvas nintex-workflow


    【解决方案1】:

    今天没有可行的方法来做到这一点。

    没有像 Eval() 这样的“执行”字符串 - 正是出于您提到的原因。 但即使您尝试自己构建它 - 您可以使用正则表达式来查找占位符,但您仍然没有办法评估占位符中的表达式......这只是回避了需要 Eval() 的问题.例如,您仍然需要 Eval("1+2") 而不是 Eval($"answer is {1+2}")

    FWIW,最近在 Power Fx 中引入了字符串插值 (https://powerapps.microsoft.com/en-us/blog/power-fx-string-interpolation-index-function-and-randbetween-function/)

    【讨论】:

      猜你喜欢
      • 2012-10-26
      • 1970-01-01
      • 2019-02-08
      • 1970-01-01
      • 2021-12-18
      • 2022-11-13
      • 2021-04-23
      • 1970-01-01
      相关资源
      最近更新 更多