关于集算器自定义函数的一点建议

 

当前集算器可以通过自定义函数的功能调用 java 方法. 例如:

imagepng

个人认为这种方式使用起来比较不友好. 本人建议:

在集算器中增加函数注册机制, 可以通过在配置文件中配置的方式来注册一个函数, 例如:


<function  namespaces="ext" type="java" class="com.mycom.Utils">
  <method  name="hello" alias="sayHello" returnType="list">
     <arg  name="name" type="string"/>
  </method>
  <method  name="isEmpty" returnType="boolean">
    <desc>判断一个字符串是null还是""</desc>
    <arg  name="value" type="string"/>
  </method>
</function>

<!-- 直接执行文件并返回结果 -->
<function  namespaces="ext" name="sayHello" type="groovy" file="myext/groovy/Utils.groovy" returnType="string">
    <arg  name="name" type="string"/>
</function>

<!-- 调用脚本中的函数 -->

<function  namespaces="ext" type="groovy" file="myext/groovy/Utils.groovy" >
    <method  name="hello" alias="sayHello" returnType="list">
        <arg  name="name" type="string"/>
    </method>
</function>

<!-- 直接写简单的groovy代码 -->
<function  namespaces="ext" type="groovy">
    <method  name="sayHello" returnType="string">
        <arg  name="name" type="string"/>
        <script  name="syHello">
        <![CDATA\[

         // groovy 代码

        ]]>
        </script>
    </method>
</function>

<!-- 调用一个http服务 -->
<function  namespaces="ext" name="sayHell" type="htpp" url="http://127.0.0.1/sayHell" method="POST">
   <arg  name="name" type="string"/>
</function>

可以在集算器中调用自定义函数:

ext.sayHello(A1)

ext.isEmpty(A2)

如果能加入上述功能或者类似的功能, 有如下好处:

  1. 函数调用和集算器原生函数调用差不多, 只是增加了命名空间.(命名空间为了避免函数名冲突)

  2. 大大增加了扩展性, 有的程序不太适合集算器脚本来写, 可以通过这种方式来调用外部函数.

  3. 外部函数可以不是 java 代码, 可以是其他类型比如 groovy javascript 等, 如果使用 http 方式, 那就更灵活了.

以上是我最近使用集算器脚本后的个人建议, 希望起到抛砖引玉的作用.