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

Eit*_*s30 2 lambda kotlin

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

val aba : ((Int) -> Double) -> ((Int) -> Double)
Run Code Online (Sandbox Code Playgroud)

我试图的方式:

aba = {(b: (Int -> (Double))-> {x: Int  -> 5 - 2 * b(x)} }
Run Code Online (Sandbox Code Playgroud)

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

  1. 期待逗号或“)”(来自编译器)
  2. 破坏类型 (int) 的声明初始值设定项 -> Double 必须有一个 component1() 函数(来自编辑器)

我知道,如果我将省略(Int -> (Double)并只留下 b ,它会起作用:

aba = {b  -> {x: Int  -> 5 - 2 * b(x)} }
Run Code Online (Sandbox Code Playgroud)

但是为什么我不能显式地写参数呢?有人能告诉我是什么问题吗?

Wil*_*zel 5

aba = { (b: (Int -> (Double)) -> { x: Int  -> 5 - 2 * b(x) } }
Run Code Online (Sandbox Code Playgroud)

不正确,因为您缺少右括号(错误 1)。修复后:

aba = { (b: Int -> (Double)) -> { x: Int  -> 5 - 2 * b(x) } }
Run Code Online (Sandbox Code Playgroud)

你遇到了错误 2。

b在这种情况下,声明周围的括号是不正确的语法。

你告诉编译器你想解构lambda 的参数。但该类型不支持,因为它没有component1()功能。

aba = { b: Int -> (Double) -> { x: Int  -> 5 - 2 * b(x) } } 
Run Code Online (Sandbox Code Playgroud)

应该管用。

注意:您可以省略类型声明的原因b是编译器可以推断类型,因为它aba从声明中知道类型。