4

我使用 Telosys ( https://www.telosys.org ) 生成 Python 源代码,它工作正常。但我有一个特定的需求,可以通过调用特定的转换函数来解决。

是否可以创建特定函数并在 Telosys 模板中调用它?

例如:myFunction(“abc”)$something.myFunction(“abc”)或其他任何东西

如有必要,我可以用 Java、Python 或 JavaScript 等不同语言创建此函数。

4

1 回答 1

3

Telosys 被设计为可扩展的,所以是的,您可以创建自己的函数并在模板中调用它们。由于 Telosys 是用 Java 编写的,您必须在 Java 中创建这些函数,然后使用“.vm”文件中的“ loader ”对象来加载您的类并调用该类中定义的方法。

以下是如何逐步做到这一点:

  1. 使用您首选的 IDE 创建一个 Java 类来定义您的特定方法。此类可以在任何包中(包括“默认/未命名包”),如果您不需要该类的实例,则方法可以是“静态”。

  2. 编译这个类(目标是生成一个简单的“ .class ”文件或“ .jar ”文件,如果你愿意的话)

  3. 将类(或 jar)放在模板包文件夹中:

  • 如果你有一个“ .class ”文件,把它放在“ classes ”文件夹中
  • 如果你有一个“ .jar ”文件,把它放在“ lib ”文件夹中

例子 :

TelosysTools/templates/my-bundle/classes/MyClass.class
TelosysTools/templates/my-bundle/lib/my-lib.jar
  1. 在模板文件(“.vm”)中,使用“ $loader ”对象来加载您的 Java 类并调用它的任何方法,请参见此处的“$loader”参考:http ://www.telosys.org/templates-doc/对象/loader.html

如果你所有的方法都是“静态的”,你就不需要实例,所以只需使用“<strong>$loader.loadClass()”。例子 :

## load the class and keep it in a new “$Math” object (no instance created)
#set( $Math = $loader.loadClass("java.lang.Math")
## use the static methods of this class
$Math.random()

如果你的方法不是“静态的”,所以你需要一个实例,那么使用“<strong>$loader.newInstance()”。例子 :

## create an instance of StringBuilder and put it in the context with #set
#set( $strBuilder = $loader.newInstance('java.lang.StringBuilder') )
## use the instance to call a method
$strBuilder.append('aa')
       
## create new instance of a specific class : MyTool.class
#set( $tool = $loader.newInstance('MyTool') )
## use the instance to call a method
$tool.myFunction()

综上所述,您可以使用 Java-JRE 提供的任何类(例如“Math”、“StringBuilder”),您可以通过添加“.jar”文件重用现有库(如果需要,请不要忘记添加所需的依赖项) jar 文件不是独立的)或仅添加一个“.class”文件。

于 2020-08-19T10:02:55.840 回答