2017-12-28 28 views
4

에 호출 된 객체를 반환 입력 방법 '과'기능을 내장의 apply method가 :는 코 틀린에

inline fun <T> T.apply(block: T.() -> Unit): T (source) 

는 수신기로 this 값으로 지정된 함수 block를 호출 this를 반환 값.

이는 다음과 같이 객체를 구성 할 수 있습니다

val myObject = MyObject().apply { 
    someProperty = "this value" 
    myMethod() 
} 

myObjectapply {} 호출 후 MyObject 될 것이다.

그루비 유사한 with method

public static <T,U> T with(U self, 
    @DelegatesTo(value=DelegatesTo.Target.class,target="self",strategy=1) 
    Closure<T> closure 
) 

은 폐쇄가 개체 참조 자기 위해 호출 할 수있게된다.

...

그리고 문서에서 예제 :

그루비 방법 부분은 항상 만드는 with 전화의 위임을 반환 return it를 사용하는 데

def b = new StringBuilder().with { 
    append('foo') 
    append('bar') 
    return it 
} 
assert b.toString() == 'foobar' 
코드는 상당히 장황하다.

Grooty에 Kotlin apply과 동등한 항목이 있습니까?

+0

Kotlin은 * inline *을 사용하여 트릭을 수행하고 Groovy에는 인라인이 없으므로 이와 동등한 기능이 있다고 생각하지 않습니다. – aristotll

답변

3

이 함수의 이름은 tap이며 Groovy 2.5의 일부입니다. 이름 지정에 대한 설명은 merge request을 참조하십시오.

그 외의 경우에만 foo.with{ bar=baz; it } 만 사용할 수 있습니다. 메타 프로그래밍을 통해 자신의 doto, tap, apply 등을 개조 할 수 있습니다.