3

考虑 Scala 中的以下定义:

val f = ((_: Int) + 1).toString()

代码将函数文字 _ + 1 的字符串表示分配给 f,这是很自然的,除了这不是我想要的。我打算定义一个接受 int 参数的函数,将其递增 1,并返回其字符串格式。

为了消除歧义,我必须编写一个带有显式参数的 lambda 表达式:

val g = (x: Int) => (x + 1).toString()

那么我可以得出结论,占位符语法不适合复杂的函数文字吗?还是有一些规则说明函数文字的范围?似乎占位符不能嵌套在函数文字中的括号中(定义其类型所需的除外)

4

2 回答 2

7

是的,您认为占位符语法在简单的函数文字之外没有用处是正确的。

对于它的价值,您提到的特定情况可以结合占位符语法和函数组合来编写。

scala> val f = ((_: Int) + 1) andThen (_.toString)
f: Int => java.lang.String = <function1>

scala> f(34)
res14: java.lang.String = 35
于 2012-01-29T09:07:29.320 回答
3

似乎占位符不能嵌套在函数文字中的括号中(定义其类型所需的除外)

这是对的。请参阅占位符语法规则和用例示例

于 2012-01-29T08:43:18.807 回答