我正在尝试将 lambda 表达式分配给以下变量:
val aba : ((Int) -> Double) -> ((Int) -> Double)
我尝试的方式:
aba = {(b: (Int -> (Double))-> {x: Int -> 5 - 2 * b(x)} }
但我遇到了不同的错误,例如:
- 期望逗号或')'(来自编译器)
- 破坏类型 (int) 的声明初始值设定项 -> Double 必须具有 component1() 函数 (来自编辑)
我知道如果我将省略 (Int -> (Double) 并只保留 b 它会起作用:
aba = {b -> {x: Int -> 5 - 2 * b(x)} }
但是为什么我不能显式写参数呢? 有大佬能告诉我是什么问题吗?
最佳答案
aba = { (b: (Int -> (Double)) -> { x: Int -> 5 - 2 * b(x) } }
不正确,因为您缺少右括号(错误 1)。修复后:
aba = { (b: Int -> (Double)) -> { x: Int -> 5 - 2 * b(x) } }
你遇到了错误 2。
在这种情况下,b
声明周围的括号是不正确的语法。
你告诉编译器你想要destructure lambda 的参数。但是该类型不支持,因为它没有 component1()
函数。
aba = { b: Int -> (Double) -> { x: Int -> 5 - 2 * b(x) } }
应该可以。
注意:之所以可以省略 b
的类型声明,是因为编译器可以推断类型,因为它从声明中知道 aba
的类型。
关于kotlin - 如何将 lambda 表达式分配给函数类型变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64508126/