스칼라에서 영감을 받아 Kotlin으로 구현된 PartialFunction
5995 단어 javakotlinprogramming
import java.util.function.Function
import java.util.function.Predicate
/**
* 参考scala的偏函数
*
* @see scala.PartialFunction
*/
abstract class PartialFunction<X, Y> : Predicate<X>, Function<X, Y> {
fun isDefinedAt(x: X): Boolean {
return test(x)
}
override fun apply(x: X): Y {
return if (isDefinedAt(x)) {
applyIfDefined(x)
} else {
throw IllegalArgumentException("Value: ($x) isn't supported by this function")
}
}
abstract fun applyIfDefined(x: X): Y
infix fun orElse(fallback: PartialFunction<X, Y>): PartialFunction<X, Y> {
val outer: PartialFunction<X, Y> = this
return object : PartialFunction<X, Y>() {
override fun test(x: X): Boolean {
return outer.test(x) || fallback.test(x)
}
override fun applyIfDefined(x: X): Y {
return if (outer.isDefinedAt(x)) {
outer.applyIfDefined(x)
} else {
fallback.apply(x)
}
}
override fun apply(x: X): Y {
return applyIfDefined(x)
}
}
}
}
Reference
이 문제에 관하여(스칼라에서 영감을 받아 Kotlin으로 구현된 PartialFunction), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/espresso/partialfunction-inspired-by-scala-20fc텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)