wei*_*idi 3 scala placeholder function-literal
请考虑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)
那么我可以得出结论:占位符语法不适合复杂的函数文字吗?或者是否有一些规则说明函数文字的范围?似乎占位符不能嵌套在函数文字中的括号中(除了定义其类型所需的除外)
是的,你认为占位符语法除了简单的函数文字之外没有用处,你是对的.
对于它的价值,你提到的特殊情况可以用占位符语法和函数组合的结合来编写.
scala> val f = ((_: Int) + 1) andThen (_.toString)
f: Int => java.lang.String = <function1>
scala> f(34)
res14: java.lang.String = 35
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
3012 次 |
最近记录: |