You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为何Lambda表达式`var a: ()->Int = {()->5};`报“Expected no parameters”错误?

Kotlin Lambda写法问题解析

为什么第一种写法错误?

你声明的变量a类型是**()->Int**,意思是一个无参数、返回Int类型的函数。

第一种写法:

var a: ()->Int = {()->5};

这里的{()->5}本质是一个Lambda,它的逻辑是「定义一个无参数的内部函数并返回」,所以这个Lambda的实际类型是**()->()->Int**(无参数,返回另一个无参数返回Int的函数),和你声明的()->Int类型完全不匹配,编译器自然会报错"Expected no parameters"——它提示你这个Lambda不需要参数,你却在里面嵌套了一个函数定义,而不是直接返回Int值。

第二种写法为什么正确?

var a: ()->Int = {5};

这个Lambda没有参数,直接把5作为返回值。Kotlin中,Lambda的最后一行表达式就是返回值,默认省略return关键字,完全符合()->Int的类型要求:无参数,返回Int。

关于你遇到的类似问题

你提到的「期望**()->Unit**却传入**(Any?)->Unit**」,是因为Kotlin编译器的类型推断有时候会出现偏差。比如当你写一个不带参数的Lambda时,如果上下文存在带参数的函数类型,编译器可能会错误推断成带参数的(默认推断成(Any?)->Unit)。这时候你可以显式用{}或者_ ->来明确表示这是一个无参数的Lambda,比如:

// 明确无参数的Lambda
val callback: ()->Unit = {}
// 用下划线表示不接收任何参数
val callback: ()->Unit = { _ -> }

内容的提问来源于stack exchange,提问作者Sanja

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.07 22:19:58