2017-05-05 107 views
2

我对沃森对话专家有另一个问题;)我有一个新问题。我需要一个字符串评估的变量名:我创建4个静态值:评估方法沃森谈话?

{ "Pmarguerita": 9, 
    "Pregina": 10, 
    "Pcarne": 10, 
    "PEVEA": 12 
} 

当我分析用户的输入,我串连这样的:

{ 
"PiPrice": "<? 'P'+entities['name_pizza'][0].value ?>" 
"total" :"<?entities['sys-number'][0].value.toInt() * eval(PiPrice) ?>" 
} 

但eval函数无法识别和我找不到任何文档,允许一个变量的值在Python进行评估,以一个变量名的值,如:

a = 3 
b ='a' 
print(eval(b)) 
3 

我可以做一个,如果elif的多个节点看一个样块,但如果用户在开始变得重要,它需要的节点数量将会呈指数级增长。 有没有在app.js src代码中使用它的方法,你可以在App builder Pipeline中找到它?

回答

1

我测试类似的东西,并与下面的解决方法提出了:

  • 我一分为二的节点,每使用一个评价(<? ?>
  • 第一节点有一个空的输出,但设置一个上下文变量添加到评估值。该节点被配置为跳转到另一个节点(第二个节点)。
  • 第二个节点进行最终评估并生成输出(响应)。
0

虽然@data_henriks答案是在会话中正确使用它的方法,但有时您需要在应用程序层执行此操作。

因此,您会将每个项目的值作为上下文变量返回,然后创建一个上下文变量,如"run_eval",并使其值与您要使用上下文变量名称执行的eval语句相匹配。用返回值设置上下文变量。

例如:

"context": { 
    "Pmarguerita": 9, 
    "Pregina": 10, 
    "Pcarne": 10, 
    "PEVEA": 12, 
    "PiPrice": "<? 'P'+entities['name_pizza'][0].value ?>", 
    "Items": "<?entities['sys-number'][0].value.toInt() ?>" 
    "run_eval" : "$PiPrice * $Items", 
    "run_eval_return_field": "total" 
} 

在你的应用程序层,你会解析出run_eval所以你最终会喜欢的东西(5个项目,$ 10只)。

10 * 5 

然后的eval()表示,并返回到谈话类似以下内容:

"context": { 
    "Pmarguerita": 9, 
    "Pregina": 10, 
    "Pcarne": 10, 
    "PEVEA": 12, 
    "PiPrice": "10", 
    "Items": "5" 
    "total": "50" 
} 

不言而喻,你需要处理运行EVAL的危险。