Ошибка IBM Watson conversation service: не удается преобразовать из "группы методов" в "разговор".onMessage'
Я пытаюсь запустить IBM Watson conversation service в unity и ниже приведен фрагмент кода
private Conversation m_Conversation = new Conversation();
private string m_WrokspaceID = "xyz";
private string m_input = "help";
// Use this for initialization
void Start () {
Debug.Log("user : " + m_input);
m_Conversation.Message(OnMessage, m_WrokspaceID, m_input);
}
void OnMessage(MessageResponse resp, string customData) {
foreach (Intent mi in resp.intents)
{
Debug.Log("intent : " + mi.intent + ", confidence :" + mi.confidence);
}
Debug.Log("response :" + resp.output.text);
}
Но я получаю эту ошибку
cannot convert from 'method group' to 'conversation.onMessage'
Что я делаю не так? Фрагмент кода, который я получаю от официального РЕПО GitHub watson.
2 ответа:
Вы можете привести ответ в виде словаря и попытаться получить значение оттуда. Используя универсальный объект вместо статической модели данных, вы можете передать больше информации через ответ.
private void OnMessage(object resp, string customData) { Dictionary<string, object> respDict = resp as Dictionary<string, object>; object intents; respDict.TryGetValue("intents", out intents); foreach(var intentObj in (intents as List<object>)) { Dictionary<string, object> intentDict = intentObj as Dictionary<string, object>; object intentString; intentDict.TryGetValue("intent", out intentString); object confidenceString; intentDict.TryGetValue("confidence", out confidenceString); Log.Debug("ExampleConversation", "intent: {0} | confidence {1}", intentString.ToString(), confidenceString.ToString()); } }
Согласностроке 32 в исходном коде
Conversation
делегат был изменен на:public delegate void OnMessage(object resp, string customData);
Вам придется изменить свой метод
OnMessage
, чтобы отразить это:void OnMessage(object resp, string customData) { // ... }