是否可以在 Telosys 模板中调用专门创建的函数?
Is it possible in a Telosys template to call a function created specifically?
我使用 Telosys (https://www.telosys.org) 生成 Python 源代码,它工作正常。但我有一个特定的需求,可以通过调用特定的转换函数来解决。
是否可以创建特定函数并在 Telosys 模板中调用它?
例如:myFunction(“abc”)
或 $something.myFunction(“abc”)
或其他任何内容
如有必要,我可以用 Java、Python 或 JavaScript 等不同语言创建此函数。
Telosys 被设计为可扩展的,所以是的,您可以创建自己的函数并在模板中调用它们。
由于 Telosys 是用 Java 编写的,因此您必须在 Java 中创建这些函数,然后使用“.vm”文件中的“loader”对象来加载您的 class 并调用此 class.
中定义的方法
以下是逐步执行此操作的方法:
使用您喜欢的 IDE 创建一个 Java class 定义您的特定方法。这个 class 可以在任何包中(包括“默认/未命名包”),如果您不需要 class.[= 的实例,方法可以是“静态”的14=]
编译此 class(目标是生成一个简单的“.class”文件或“.jar" 文件,如果你愿意的话)
将 class(或 jar)放入模板包文件夹中:
- 如果您有“.class”文件,请将其放入“classes”文件夹
- 如果您有“.jar”文件,请将其放入“lib”文件夹
示例:
TelosysTools/templates/my-bundle/classes/MyClass.class
TelosysTools/templates/my-bundle/lib/my-lib.jar
- 在模板文件 (".vm") 中使用“$loader”对象来加载您的 Java class 并调用它的任何方法
请参阅此处的“$loader”参考:http://www.telosys.org/templates-doc/objects/loader.html
如果你所有的方法都是“静态”的,你不需要一个实例,所以只需使用“$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()
如果你的方法不是“静态”的,所以你需要一个实例,那么使用“$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 提供的任何 class(例如“Math”、“StringBuilder”),您可以通过添加“.jar”文件来重用现有库(如果 jar 文件不是 stand-alone,不要忘记添加所需的依赖项)或者只添加一个“.class”文件。
我使用 Telosys (https://www.telosys.org) 生成 Python 源代码,它工作正常。但我有一个特定的需求,可以通过调用特定的转换函数来解决。
是否可以创建特定函数并在 Telosys 模板中调用它?
例如:myFunction(“abc”)
或 $something.myFunction(“abc”)
或其他任何内容
如有必要,我可以用 Java、Python 或 JavaScript 等不同语言创建此函数。
Telosys 被设计为可扩展的,所以是的,您可以创建自己的函数并在模板中调用它们。 由于 Telosys 是用 Java 编写的,因此您必须在 Java 中创建这些函数,然后使用“.vm”文件中的“loader”对象来加载您的 class 并调用此 class.
中定义的方法以下是逐步执行此操作的方法:
使用您喜欢的 IDE 创建一个 Java class 定义您的特定方法。这个 class 可以在任何包中(包括“默认/未命名包”),如果您不需要 class.[= 的实例,方法可以是“静态”的14=]
编译此 class(目标是生成一个简单的“.class”文件或“.jar" 文件,如果你愿意的话)
将 class(或 jar)放入模板包文件夹中:
- 如果您有“.class”文件,请将其放入“classes”文件夹
- 如果您有“.jar”文件,请将其放入“lib”文件夹
示例:
TelosysTools/templates/my-bundle/classes/MyClass.class
TelosysTools/templates/my-bundle/lib/my-lib.jar
- 在模板文件 (".vm") 中使用“$loader”对象来加载您的 Java class 并调用它的任何方法 请参阅此处的“$loader”参考:http://www.telosys.org/templates-doc/objects/loader.html
如果你所有的方法都是“静态”的,你不需要一个实例,所以只需使用“$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()
如果你的方法不是“静态”的,所以你需要一个实例,那么使用“$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 提供的任何 class(例如“Math”、“StringBuilder”),您可以通过添加“.jar”文件来重用现有库(如果 jar 文件不是 stand-alone,不要忘记添加所需的依赖项)或者只添加一个“.class”文件。