Kotlin 如何将lambda表达式指定给函数类型变量?

Kotlin 如何将lambda表达式指定给函数类型变量?,kotlin,lambda,Kotlin,Lambda,我正在尝试将lambda表达式分配给以下变量: val aba : ((Int) -> Double) -> ((Int) -> Double) 我尝试的方式是: aba = {(b: (Int -> (Double))-> {x: Int -> 5 - 2 * b(x)} } 但我得到了不同的错误,比如: 应为逗号或“')”(来自编译器) 类型为(int)->Double的销毁声明初始值设定项必须具有component1()函数 (来自编辑) 我知道如

我正在尝试将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
    的声明周围的比喻是不正确的语法

    您告诉编译器您想要修改lambda的参数。但是该类型不支持此操作,因为它没有
    component1()
    函数

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

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

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

    在指定
    b

    的类型时,不需要额外的括号。您编写的代码行不起作用不是因为destrcute问题:aba={b:Int->(Double)->{x:Int->5-2*b(x)}编辑器在上面一行说:“意外标记(使用“;”在同一行上分隔表达式”。此外,为什么aba={b:(Int)->(Double)->{x:Int->5-2*b(x)}不会work@Eitanos30你引用的那一行是有效的。关于我回答中的第一行:我从你那里复制了它。不管错误消息说什么,妄想症计数都是关闭的。下次最好将这些片段与它们各自的错误消息一起列出,以避免混淆。