9.5.2根据需要返回结果

在自定义函数中,可以返回计算结果,也可以不返回,如:

  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中的结果如下:

   

注意其中A1A2中结果的数据类型不同,显示模式是有区别的。自定义函数返回的结果,可以在后面的计算中使用。