以下代码无法在REPL和工作表中编译:
def add(i: Int, j: Int): Int = i + j
def add(i: Int, j: Int, k: Int): Int = add(add(i, j), k)
出现以下错误:
Main.scala:63: not enough arguments for method add: (i: Int, j: Int, k: Int)Int.
Unspecified value parameter k.
def add(i: Int, j: Int, k: Int): Int = add(add(i, j), k)
^
Compilation Failed
但是这段代码编译得很好:
object Test {
def add(i: Int, j: Int): Int = i + j
def add(i: Int, j: Int, k: Int): Int = add(add(i, j), k)
}
发生了什么事?
答案 0 :(得分:3)
从REPL开始,您运行的每个语句都在内部范围内,因此add(i: Int, j: Int, k: Int)
包含3个参数,外部为add(i: Int, j: Int)
。这就是你从REPL得到错误的原因。
答案 1 :(得分:2)
如果要重载REPL中的方法,请在:paste
模式下键入它们或将它们包装在对象中。
scala> :paste
// Entering paste mode (ctrl-D to finish)
def add(i: Int, j: Int): Int = i + j
def add(i: Int, j: Int, k: Int): Int = add(add(i, j), k)
// Exiting paste mode, now interpreting.
add: (i: Int, j: Int)Int <and> (i: Int, j: Int, k: Int)Int
add: (i: Int, j: Int)Int <and> (i: Int, j: Int, k: Int)Int
scala> object Wrapper {
| def add(i: Int, j: Int): Int = i + j
| def add(i: Int, j: Int, k: Int): Int = add(add(i, j), k)
| }
defined module Wrapper