Scala REPL和工作表中的重载方法无法编译

Scala REPL和工作表中的重载方法无法编译,scala,Scala,以下代码无法在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,

以下代码无法在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)
}

发生了什么?

从REPL开始,您运行的每个语句都在一个内部范围内,因此
add(i:Int,j:Int,k:Int)
有3个参数,外部
add(i:Int,j:Int)
。这就是为什么您从REPL中得到错误。

从REPL中,您运行的每个语句都在一个内部范围内,所以
add(i:Int,j:Int,k:Int)
有3个参数,外部
add(i:Int,j:Int)
。这就是为什么REPL会出错。

如果要在REPL中重载方法,请在
:粘贴
模式下键入它们或将它们包装到对象中

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
scala>:粘贴
//进入粘贴模式(按ctrl-D键完成)
定义添加(i:Int,j:Int):Int=i+j
def add(i:Int,j:Int,k:Int):Int=add(add(i,j),k)
//正在退出粘贴模式,现在正在解释。
加:(i:Int,j:Int)Int(i:Int,j:Int,k:Int)Int
加:(i:Int,j:Int)Int(i:Int,j:Int,k:Int)Int
scala>对象包装器{
|定义添加(i:Int,j:Int):Int=i+j
|def add(i:Int,j:Int,k:Int):Int=add(add(i,j),k)
| }
定义的模块包装器

如果要在REPL中重载方法,请在
模式下键入它们:粘贴
或将它们包装到对象中

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
scala>:粘贴
//进入粘贴模式(按ctrl-D键完成)
定义添加(i:Int,j:Int):Int=i+j
def add(i:Int,j:Int,k:Int):Int=add(add(i,j),k)
//正在退出粘贴模式,现在正在解释。
加:(i:Int,j:Int)Int(i:Int,j:Int,k:Int)Int
加:(i:Int,j:Int)Int(i:Int,j:Int,k:Int)Int
scala>对象包装器{
|定义添加(i:Int,j:Int):Int=i+j
|def add(i:Int,j:Int,k:Int):Int=add(add(i,j),k)
| }
定义的模块包装器