Scala无参匿名函数对应的FunctionN类型及IDE脱糖报错问题
问题解答
1. 无参匿名函数对应的Function类型
Scala 标准库中FunctionN系列特质用来表示不同参数数量的函数,其中N对应函数接收的参数个数:
无参函数对应Function0特质,你示例中返回字符串的无参函数,正确的显式类型声明为Function0[String],合法写法如下:
val hi: Function0[String] = () => "Hi"
也可以用语法糖简写为() => String。
2. IDE脱糖结果存在编译错误的原因
错误来自IDE脱糖功能的逻辑缺陷,具体有两个问题:
- 类型匹配错误:你的代码是无参函数,应该对应
Function0,但IDE错误将其匹配为接收1个参数的Function1特质,属于基础的类型归类错误。 - 语法规则错误:
Function1[(), _root_.java.lang.String]中,泛型参数位需要填写类型,而()是Unit类型的具体值,不是类型声明(Unit类型的正确写法是Unit),编译器解析到()后的逗号时,无法匹配合法的Scala语法规则,因此抛出'=>' expected but ',' found.的报错。
内容的提问来源于stack exchange,提问作者Dave Prateek
相关产品推荐
相关产品推荐

