다른 Groovy 스크립트의 클로저를 저장할 수 있습니까?다른 스크립트의 클로저를 Groovy 전역 저장
package com.test
class ClosureContainer {
static closures = [:]
static def AddClosure(String name, Closure cl) {
println "Adding closure named ${name}"
closures[name] = cl
}
}
그리고 나는 그것을 폐쇄를 추가 그루비 스크립트 싶은 :
import com.test.ClosureContainer as container
container.AddClosure("Interesting stuff", {
println "I'm doing some interesting stuff"
})
을 그리고 나중에, 내가해야을 의 내가 클로저를 저장해야 클래스의 일종 있다고 가정 해 봅시다 다음과 같이 부를 수 있습니다 :
def closureCode = ClosureContainer.closures["Interesting stuff"]
closureCode()
Groovy에서 가장 좋은 방법은 무엇입니까? 이 스크립트에서 클래스가 생성되므로 스크립트를 호출하는 방법을 잘 모르겠습니다. 런타임 중에 스크립트의 인스턴스를 만들 수 있지만이를 하드 코딩하지 않고 클래스/스크립트 목록을 검색 할 수는 없습니다.
UPDATE :
하는의 내가 컨테이너에 몇 클로저를 추가 패키지 com.test.scripts에 testScript.groovy이 있다고 가정하자.
def className = Class.forName("com.test.scripts.testScript")
def instance = className.newInstance()
instance.run()
그리고 나는 testScript 이름을 하드 코딩 해요 : 나는 Gradle을이 스크립트에서 클래스를 생성하고이 같은 코드의 인스턴스를 만들 수 있도록 노력했다. 하지만 많은 스크립트가있을 것이고 동적으로 검색 할 수 있어야합니다.
하드 코딩이란 무엇입니까? 코드의 어느 부분이 하드 코딩 되었습니까? – dsharew
질문을 업데이트했습니다. – Jaryn6909
오, 이제 GroovyScriptEngine을 사용해야하는 경우를 이해합니다. – dsharew