수색…
통사론
명시 적 매개 변수 :
{parameterName : ParameterType, otherParameterName : OtherParameterType -> anExpression ()}
유추 된 매개 변수 :
추가 : (Int, Int) -> Int = {a, b -> a + b}
단일 매개 변수로
it
발 광장 : (Int) -> Int = {it * it}
서명:
() -> ResultType
(InputType) -> ResultType
(InputType1, InputType2) -> ResultType
비고
입력 유형 매개 변수는 컨텍스트에서 유추 될 수있을 때 생략 될 수 있습니다. 예를 들어 함수를 사용하는 클래스에 함수가 있다고 가정 해 보겠습니다.
data class User(val fistName: String, val lastName: String) {
fun username(userNameGenerator: (String, String) -> String) =
userNameGenerator(firstName, secondName)
}
람다를 전달하여이 함수를 사용할 수 있으며 매개 변수가 함수 시그니처에 이미 지정되어 있으므로 람다 식으로 다시 선언 할 필요가 없습니다.
val user = User("foo", "bar")
println(user.userName { firstName, secondName ->
"${firstName.toUppercase}"_"${secondName.toUppercase}"
}) // prints FOO_BAR
이것은 람다를 변수에 할당 할 때도 적용됩니다 :
//valid:
val addition: (Int, Int) = { a, b -> a + b }
//valid:
val addition = { a: Int, b: Int -> a + b }
//error (type inference failure):
val addition = { a, b -> a + b }
람다가 하나 개의 매개 변수를 사용하고, 유형이 문맥에서 추론 할 수있는 경우, 당신은에 의해 매개 변수를 참조 할 수 있습니다 it
.
listOf(1,2,3).map { it * 2 } // [2,4,6]
함수를 필터링하는 매개 변수로 람다
val allowedUsers = users.filter { it.age > MINIMUM_AGE }
람다가 변수로 전달됨
val isOfAllowedAge = { user: User -> user.age > MINIMUM_AGE }
val allowedUsers = users.filter(isOfAllowedAge)
함수 호출 벤치마킹을위한 람다
기능이 실행되는 데 걸리는 시간을 측정하기위한 범용 스톱워치 :
object Benchmark {
fun realtime(body: () -> Unit): Duration {
val start = Instant.now()
try {
body()
} finally {
val end = Instant.now()
return Duration.between(start, end)
}
}
}
용법:
val time = Benchmark.realtime({
// some long-running code goes here ...
})
println("Executed the code in $time")
Modified text is an extract of the original Stack Overflow Documentation
아래 라이선스 CC BY-SA 3.0
와 제휴하지 않음 Stack Overflow