我已经看了scala-lang.org上的调查列表,并注意到一个奇怪的问题:" 你能说出"_"的所有用途吗? " 你能?如果是,请在此处进行.我们赞赏解释性的例子.
我想在Scala中使用漂亮的单行迭代迭代值列表.
例如,这个效果很好:
scala> val x = List(1,2,3,4)
x: List[Int] = List(1, 2, 3, 4)
scala> x foreach println
1
2
3
4
Run Code Online (Sandbox Code Playgroud)
但是,如果我使用占位符_,它会给我一个错误:
scala> x foreach println(_ + 1)
<console>:6: error: missing parameter type for expanded function ((x$1) =>x$1.$plus(1))
x foreach println(_ + 1)
^
Run Code Online (Sandbox Code Playgroud)
这是为什么?这里不能编译推断类型?
请考虑Scala中的以下定义:
val f = ((_: Int) + 1).toString()
Run Code Online (Sandbox Code Playgroud)
代码为f指定函数文字_ + 1的字符串表示,这很自然,除了这不是我想要的.我打算定义一个接受int参数的函数,将其递增1,并返回其字符串格式.
要消除歧义,我必须编写一个带有显式参数的lambda表达式:
val g = (x: Int) => (x + 1).toString()
Run Code Online (Sandbox Code Playgroud)
那么我可以得出结论:占位符语法不适合复杂的函数文字吗?或者是否有一些规则说明函数文字的范围?似乎占位符不能嵌套在函数文字中的括号中(除了定义其类型所需的除外)