수색…
명시 적 매개 변수로 종료
def addNumbers = { a, b -> a + b }
addNumbers(-7, 15) // returns 8
암시 적 매개 변수가있는 클로저
['cat', 'dog', 'fish'].collect { it.length() }
it
당신이 하나의 매개 변수가 명시 적으로 매개 변수의 이름을 지정하지 않으면 매개 변수의 기본 이름입니다. 선택적으로 매개 변수를 선언 할 수도 있습니다.
['cat', 'dog', 'fish'].collect { animal -> animal.length() }
메소드를 클로저로 변환
& 연산자를 사용하여 메소드를 클로저로 변환 할 수 있습니다.
def add(def a, def b) { a + b }
Closure addClosure = this.&add
assert this.add(4, 5) == addClosure(4, 5)
암시 적 수신기를 사용하는 메서드 호출에 대한 사용자 지정 대상으로 종료
class MyHello {
def sayHello() {
"Hello, world"
}
}
def cl = { sayHello() }
cl() // groovy.lang.MissingMethodException
cl.delegate = new MyHello()
cl(); // "Hello, world"
Groovy DSL에 광범위하게 사용됩니다.
메서드를 사용하여 클로저 주변의 동작 감싸기
많은 상용구 코드가 생길 수있는 빈번한 행동 패턴이 있습니다. Closure
를 매개 변수로 사용하는 메서드를 선언하면 프로그램을 단순화 할 수 있습니다. 예를 들어, 데이터베이스 연결을 검색하고, 트랜잭션을 시작하고, 작업을 수행 한 다음 트랜잭션을 커밋하거나 (오류가 발생한 경우) 연결을 롤백하고, 마지막으로 연결을 닫는 것이 일반적인 패턴입니다.
def withConnection( String url, String user, String pass, Closure closure) {
Connection conn = null
try {
conn = DriverManager.getConnection( url, user, pass )
closure.call( conn )
conn.commit()
} catch (Exception e) {
log.error( "DB Action failed", e)
conn.rollback()
} finally {
conn?.close()
}
}
withConnection( DB_PATH, DB_USER, DB_PASS ) { Connection conn ->
def statement = conn.createStatement()
def results = statement.executeQuery( 'SELECT * FROM users' )
// ... more processing ...
}
클로저 생성, 속성 할당 및 호출
hello를 인쇄하기 위해지도와 클로저를 만들어 보겠습니다.
def exMap = [:]
def exClosure = {
println "Hello"
}
지도의 속성에 클로저 지정
exMap.closureProp = exClosure
호출 종료
exMap.closureProp.call()
산출
Hello
또 다른 예제 - 기본 속성을 가진 클래스를 만들고 그 객체에 같은 클로저를 할당합니다.
class Employee {
def prop
}
def employee = new Employee()
employee.prop = exClosure
해당 속성을 통한 통화 종료
employee.prop.call()
산출
Hello
Modified text is an extract of the original Stack Overflow Documentation
아래 라이선스 CC BY-SA 3.0
와 제휴하지 않음 Stack Overflow