“ any”类型如何与基本类型(例如字符串)一起使用?

时间:2019-03-14 10:48:20

标签: apama

我试图使用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上。

有什么问题的想法吗?

3 个答案:

答案 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);

实际上,任何字符串值都适合。