| // FILE: 1.kt |
| |
| class My |
| |
| inline fun <T, R> T.perform(job: (T)-> R) : R { |
| return job(this) |
| } |
| |
| |
| inline fun My.someWork(job: (String) -> Any): Unit { |
| this.perform { |
| job("OK") |
| } |
| } |
| |
| inline fun My.doWork (closure : (param : String) -> Unit) : Unit { |
| this.someWork(closure) |
| } |
| |
| inline fun My.doPerform (closure : (param : My) -> Int) : Int { |
| return perform(closure) |
| } |
| |
| // FILE: 2.kt |
| |
| fun test1(): String { |
| val inlineX = My() |
| var d = ""; |
| inlineX.doWork({ z: String -> d = z; z}) |
| return d |
| } |
| |
| fun test2(): Int { |
| val inlineX = My() |
| return inlineX.perform({ z: My -> 11}) |
| } |
| |
| fun box(): String { |
| if (test1() != "OK") return "test1: ${test1()}" |
| if (test2() != 11) return "test1: ${test2()}" |
| |
| return "OK" |
| } |