2017-05-05 116 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的危險。