首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在Telosys模板中可以调用特定创建的函数吗?

在Telosys模板中可以调用特定创建的函数吗?
EN

Stack Overflow用户
提问于 2020-08-18 11:21:18
回答 1查看 185关注 0票数 4

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

是否有可能创建一个特定的函数并在Telosys模板中调用它?

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

如果有必要,我可以用不同的语言(如JavaScript、Python或​​)创建这个函数。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-08-19 10:02:55

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

下面是如何一步一步地做这件事:

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

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

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

  • 如果您有一个".class“文件,将其放在”.class“文件夹
  • 中,如果您有”..jarE 227“文件,则将其放入”E 128libE 229“文件夹<代码>H 230F 231

例子:

代码语言:javascript
复制
TelosysTools/templates/my-bundle/classes/MyClass.class
TelosysTools/templates/my-bundle/lib/my-lib.jar

模板文件(“”)中的

  1. 使用"$loader“对象加载您的Java类并调用它的任何方法--参见此处的"$loader”引用:

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

代码语言:javascript
复制
## 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()”.例子:

代码语言:javascript
复制
## 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提供的任何类(例如“数学”、“StringBuilder”),您可以通过添加“.jar”文件(不要忘记添加jar文件不是独立的)来重用现有的库(不要忘记添加一个“.class”文件)。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63467530

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档