Skip to content

Instantly share code, notes, and snippets.

@humanscape-david
Last active June 30, 2020 06:56
Show Gist options
  • Select an option

  • Save humanscape-david/ec47dde8341b35b2c6cc9968af842fc0 to your computer and use it in GitHub Desktop.

Select an option

Save humanscape-david/ec47dde8341b35b2c6cc9968af842fc0 to your computer and use it in GitHub Desktop.
# 콜백 리스너 중첩 예
fun main() {
val result = object : CallBack1 {
override fun callBack(x1: String): CallBack2 {
return object : CallBack2 {
override fun callBack(x2: String): CallBack3 {
return object : CallBack3 {
override fun callBack(x3: String): CallBack4 {
return object : CallBack4 {
override fun callBack(x4: String): CallBack5 {
return object : CallBack5 {
override fun callBack(x5: String): String {
return x1 + x2 + x2 + x3 + x4 + x5
}
}
}
}
}
}
}
}
}
}
println(result
.callBack("1")
.callBack("2")
.callBack("3")
.callBack("4")
.callBack("5")) // 12345
}
interface CallBack1 {
fun callBack(x1: String): CallBack2
}
interface CallBack2 {
fun callBack(x2: String): CallBack3
}
interface CallBack3 {
fun callBack(x3: String): CallBack4
}
interface CallBack4 {
fun callBack(x4: String): CallBack5
}
interface CallBack5 {
fun callBack(x5: String): String
}
# 콜백 리스너 중첩 예를 고차 함수와 커링을 사용해서 개선
fun main(args: Array<String>) {
val result = callback("1")("2")("3")("4")("5")
println(result) // 12345
val result1 = callback("1")("2")
println(result1("3")("4")("5")) // 12345
}
val callback: (String) -> (String) -> (String) -> (String) -> (String) -> String = { v1 ->
{ v2 ->
{ v3 ->
{ v4 ->
{ v5 ->
v1 + v2 + v3 + v4 + v5
}
}
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment