我试图使用switch子句来定义要执行的操作,具体取决于“ any”类型变量的实际类型,我的代码崩溃了。代码如下:
handleResponse(any.parseType("string",respValuesRaw[type]), currEPIFace);
...
...
...
action handleResponse(any response, CurrentExtraParamsInteface currEPIFace){
switch(response){
case string:
{}
我得到的错误是:“ ParseException-ParseType()方法中的错误:无法解析字符串:缺少开头的引号”
但是,respValuesRaw
变量是<string,string>
类型的字典
这是在Apama 10.1上。
有什么问题的想法吗?
答案 0 :(得分:3)
根据any.parseType的文档,这等效于调用type.parse,因此等效于string.parse,它指出:
parse方法采用用于事件文件的形式的字符串。 字符串参数必须用双引号引起来。全部逃脱 字符将转换为自然字符。
如果您只想使用字典条目的值,则可能只想写:
handleResponse(respValuesRaw[type], currEPIFace);
字典条目的值是一个字符串,可以将任何类型的参数传递给'any'参数。
答案 1 :(得分:1)
将像字符串这样的基本类型分配为any
类型是绝对合法的。问题出在其他地方。
由于您没有以用于事件文件的形式传递字符串,因此出现错误。一旦查看使用parseType
方法的一个示例,对错误消息的解码就变得非常简单。这就暗示了为什么它真正在参数中查找开头报价。
您的问题简单地放在:
package com.apama.test;
event Evt{}
monitor Foo {
action onload() {
Evt e1;
// handleResponse(any.parseType("string", "World!")); // #1 Invalid argument. Doesn't work
handleResponse(any.parseType("com.apama.test.Evt", "com.apama.test.Evt()")); // #2
handleResponse("World!"); // #3
}
action handleResponse(any response){
log "Hello " + response.toString() ;
}
}
打印:
com.apama.test.Foo [1] Hello any(com.apama.test.Evt,com.apama.test.Evt())
com.apama.test.Foo [1] Hello any(string,"World!")
在取消注释#1
时出现错误,如下所示:
ParseException - Error in parseType() method: Unable to parse string: missing opening quote
此外,如果将正确格式的但不存在的事件传递给parseType
方法,则会引发错误,指出找不到该类型。
ParseException - Error in parseType() method: Unable to find type 'com.apama.test.Evt2'
答案 2 :(得分:0)
我发现这种解析不是用于基本类型的,所以我改变了我调用handleResponse动作的方式:
handleResponse("string", currEPIFace);
实际上,任何字符串值都适合。