kotlin - 如何将 lambda 表达式分配给函数类型变量?

标签 kotlin lambda

我正在尝试将 lambda 表达式分配给以下变量:

val aba : ((Int) -> Double) -> ((Int) -> Double)

我尝试的方式:

aba = {(b: (Int -> (Double))-> {x: Int  -> 5 - 2 * b(x)} }

但我遇到了不同的错误,例如:

  1. 期望逗号或')'(来自编译器)
  2. 破坏类型 (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/

相关文章:

android - 减少撰写按钮内的填充

linq - linq/lambda 中的多行 foreach 循环

git - AWS CloudFormation 如何从 Git 中提取代码?

python - 为什么这个 lambda 函数比 for 循环版本更懒?

android - Kotlin Coroutines 在 Android 中的使用

android - Room "cannot find implementation for"即使使用 kapt

android - "None of the following functions can be called with the arguments supplied"带燃料 HTTP

python - 在 python 中使用 lambda 和 regex 对列表进行排序

python - 尝试将具有两个序列的嵌套循环转换为 lambda

kotlin - 强制转换和安全强制转换运算符与 null 有什么区别