Telosys 템플릿에서 특별히 생성 된 함수를 호출 할 수 있습니까?

Aug 18 2020

나는 Telosys (https://www.telosys.org) Python 소스 코드를 생성하면 제대로 작동합니다. 하지만 특정 변환 함수를 호출하여 해결할 수있는 특정 요구 사항이 있습니다.

특정 함수를 생성하고 Telosys 템플릿 내에서 호출 할 수 있습니까?

예 : myFunction(“abc”)또는 $something.myFunction(“abc”)기타

필요한 경우 Java, Python 또는 JavaScript와 같은 다른 언어로이 함수를 만들 수 있습니다.

답변

3 lgu Aug 19 2020 at 10:02

Telosys는 확장 가능하도록 설계되었으므로 예, 고유 한 함수를 만들고 템플릿에서 호출 할 수 있습니다. Telosys가 Java로 작성되었으므로 Java로 이러한 함수를 만든 다음 ".vm"파일 의 " 로더 "개체를 사용하여 클래스를로드하고이 클래스에 정의 된 메서드를 호출해야합니다.

단계별로 수행하는 방법은 다음과 같습니다.

  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/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에서 제공하는 모든 클래스 (예 : "Math", "StringBuilder")를 사용할 수 있으며, ".jar"파일을 추가하여 기존 라이브러리를 재사용 할 수 있습니다 (다음에 필요한 종속성을 추가하는 것을 잊지 마십시오. jar 파일은 독립형이 아님) 또는 단일“.class”파일을 추가하십시오.