Scala中用花括号和圆括号表示Map数据结构

6
 Array(7,8,9) map (x:Int=>x+1) //1).error, identifier expected but integer literal found.
 Array(7,8,9) map {x:Int=>x+1} //2) correct  
 Array(7,8,9) map ((x:Int)=>x+1) //3) correct
 Array(7,8,9) map (x=>x+1) //4 correct
 Array(7,8,9) map {x=>x+1} //5 correct
 Array(7,8,9) map x=>x+1   //6 error

我会请求上述案例,为什么有些人的工作有效而其他人却不是,正如评论所指出的那样。

我了解到蟋蟀的声音与Scala奥秘语法规则相关的问题之间存在直接关联。我的猜测是,(1)提供了一个歧义,解析器在“所有情况”下无法正确解决。这是一个有趣的问题。 - Richard Sitze
1个回答

1

对于:

 Array(7,8,9) map {x:Int=>x+1} //2) correct  
 Array(7,8,9) map {x=>x+1} //5 correct

来自Scala规范匿名函数定义:

对于单个未类型化的形式参数,(x) => e 可以缩写为 x => e。如果一个带有单个类型化参数(x: T) => e的匿名函数作为块的结果表达式出现,则可以缩写为 x: T => e。

对于类型 IntScala 可以在此上下文中推断出此类型


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接