在自定义函数中,可以返回计算结果,也可以不返回,如:
public static void distance3(Number loc1, Number loc2) {
double len = Math.abs(loc1.doubleValue()-loc2.doubleValue());
len = Math.round(len*1000)/1000d;
System.out.println(Double.toString(len));
}
静态方法distance3完成计算后,仅在后台打印出结果,而不返回任何数据。这样的函数类似于网格中执行格的情况,调用时可以用>开头,如:
|
A |
1 |
>invoke(test.Calc01.distance3,-12.3,15) |
此时,可以在控制台中看到执行时后台输出的情况,打开控制台可以在菜单栏中选择Tool>Options,并在Option窗口的General页面中选定Console takeover。结果如下:
如果自定义函数中需要使用参数或返回结果,应该使用可与集算器匹配的数据类型,否则有可能在展现或调用时出现错误。集算器中常用数据类型对应的Java类型如下:
整数 |
java.lang.Integer |
长整数 |
java.lang.Long |
浮点数 |
java.lang.Double |
长实数 |
java.math.BigInteger |
实数 |
java.lang.Number |
布尔型 |
java.lang.Boolean |
字符串 |
java.lang.String |
日期 |
java.sql.Date |
时间 |
java.sql.Time |
日期时间 |
java.sql.TimeStamp |
序列 |
com.raqsoft.dm.Sequence |
序表 |
com.raqsoft.dm.Table |
二进制数据 |
byte[] |
在前面的例子中,返回的数据都是Double对象,相当于集算器中的浮点数,而使用的参数都是Number,相当于集算器中的实数。在自定义函数中可以根据需要返回结果,例如,在test.Calc01中再增添两个自定义函数,返回不同类型的数据:
public static String distance4(Number loc1, Number loc2) {
double len = Math.abs(loc1.doubleValue()-loc2.doubleValue());
len = Math.round(len*1000)/1000d;
return Double.toString(len);
}
public static Sequence distance5(Number loc1, Number loc2) {
double len = Math.abs(loc1.doubleValue()-loc2.doubleValue());
len = Math.round(len*1000)/1000d;
com.raqsoft.dm.Sequence result = new com.raqsoft.dm.Sequence();
result.add(loc1);
result.add(loc2);
result.add(Double.valueOf(len));
return result;
}
这两个静态方法仍然用来计算数轴上两点间的距离,distance4返回字符串结果,distance5返回序列作为结果,其中存储了两点坐标与它们之间的距离。在网格中调用时,仍然使用invoke函数:
|
A |
1 |
=invoke(test.Calc01.distance2,-12.3,15) |
2 |
=invoke(test.Calc01.distance4,-12.3,15) |
3 |
=invoke(test.Calc01.distance5,-12.3,15) |
为了对比,A1中调用了前面使用过的distance2。执行后,A1~A3中的结果如下:
注意其中A1与A2中结果的数据类型不同,显示模式是有区别的。自定义函数返回的结果,可以在后面的计算中使用。