如何重载scala函数应用方法

时间:2011-09-08 04:40:51

标签: scala overloading

跟随: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
}

2 个答案:

答案 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())