跟随:scala loan pattern, optional function param
将withLoaner param移动到重载的apply方法的正确语法是什么?我试过以下几个版本失败了。此外,对我的错误的任何见解在概念上都非常赞赏。
def withLoaner = new {
def apply(n:Int, op: Int => String):String = (1 to n).map(op).mkString("\n")
def apply(n:Int, op: () => String):String = apply{n, i:Int => op()} // no compile
def apply(op: () => String):String = apply{1, i:Int => op()} // no compile
}
答案 0 :(得分:11)
传递多个参数时,必须在它们周围使用括号。使用{}仅适用于单个参数。
此外,在使用函数文字时,如果指定type,则必须将所有函数参数放在括号内。
所以,
def withLoaner = new {
def apply(n:Int, op: Int => String):String = (1 to n).map(op).mkString("\n")
def apply(n:Int, op: () => String):String = apply(n, i => op()) // no type on i
def apply(op: () => String):String = apply(1, (i: Int) => op()) // parenthesis around parameters
}
答案 1 :(得分:3)
2个小变化:
在致电(
时使用{
代替apply
:
应用(.......)
在arg周围使用(
隐式函数:
apply(1,(i:Int)=> op())