有关Scala占位符的问题

时间:2012-01-29 08:30:23

标签: scala placeholder function-literal

在Scala中考虑以下定义:

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

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

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

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

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

2 个答案:

答案 0 :(得分:7)

是的,你认为占位符语法除了简单的函数文字之外没有用处,你是对的。

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

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

scala> f(34)
res14: java.lang.String = 35

答案 1 :(得分:3)

  

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

这是对的。请参阅placeholder syntaxuse case example的规则。