이 코드 라인은 무엇을합니까?
fun<T:x>a.b(y: Int)=lazy{u.v<T>(y)}
나는 Kotlin에서 '게으른'것이 무엇인지 또는 '게으른'것인지 알지 못합니다.
fun <T : x> ab (y : Int) = lazy {uv (y)}
이것을 분해합시다. 먼저 가독성을 위해 다시 포맷 해 보겠습니다. :)
fun <T: x> a.b(y: Int) = lazy { u.v<T>(y) }
자, 한 조각 씩 가자.
fun
새로운 메소드를 선언한다는 의미입니다.
<T:x>
이것은 유형 이 제한 되는 유형 T
에서 작동하는 일반 메소드임을 의미 합니다 .T
x
a.b
이것은 type에 명명 된 확장 함수 임을 의미 b
합니다 a
.
(y: Int)
정의 된 함수 b
가 y
type 이라는 단일 인수를 사용함 을 의미합니다 Int
.
=
is expression body syntax-짧은 코드 줄을 반환하는 축약 형입니다. 이것은 a.b
평가 결과 값을 반환 한다는 것을 의미합니다.lazy { }
lazy
이다 코 틀린 표준 라이브러리 함수 가 필요한 때까지 제공하는 기능의 평가를 지연하고 결과를 캐시합니다. 이 함수의 반환 값은 실제로 Lazy
제공된 함수를 래핑 하는 유형 입니다.
{ u.v<T>(y) }
Lazy
객체의 값을 처음 획득 할 때 객체 가 실행할 함수 이며의 반환 값은 u.v<T>(y)
lazy 객체의 value
.
휴! 그게 무슨 뜻일까요? 예를 살펴 보겠습니다. 언제 호출되는지보기 위해 함수에 print 문을 추가한다고 가정합니다.
fun <T: x> a.b(y: Int) = lazy {
println("Executing 'b'")
u.v<T>(y)
}
이제 사용하려고하면 :
fun main() {
val a = A<T>() // Assume some type T
val lazyObject = a.b<T>(42) // Call the extension method that returns a `Lazy`
// Get the value from the lazy object - prints "Executing 'b'",
// executes `u.v<T>(y)`, caches the result, returns it - then print it
println(lazyObject.value)
// Get the value from the lazy object again. This time, DOES NOT print
// "Executing 'b'", DOES NOT execute `u.v<T>(y)`, and just returns the
// result that was already computed and cached, then print it
println(lazyObject.value)
}
요약하면, 게시 한 코드 는 값을 쿼리 할 때 초기화 된 람다를 실행하고 나중에 사용할 수 있도록 그 결과를 캐시 하는 객체 를 반환 하는 확장 메서드를 만드는 Lazy
것입니다.
도움이 되었기를 바랍니다.
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다