2016-04-29 11 views
1

Der folgenden Code zu kompilieren, schlägt fehl in der REPL zu kompilieren und in einem Arbeitsblatt:Überladene Methoden in REPL und in Arbeitsblatt nicht

def add(i: Int, j: Int): Int = i + j 
def add(i: Int, j: Int, k: Int): Int = add(add(i, j), k) 

Mit dem folgenden Fehler:

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 

jedoch dieser Code kompiliert gut:

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) 
} 

Was ist los?

Antwort

3

Von REPL geht jede Anweisung, die Sie ausführen, in einem inneren Bereich, also add(i: Int, j: Int, k: Int) mit 3 Parametern, Schatten äußere add(i: Int, j: Int). Deshalb erhalten Sie einen Fehler von REPL.

1

Wenn Sie Methoden in der REPL überladen möchten, geben Sie sie in :paste Modus ein oder wickeln Sie sie in ein Objekt ein.

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 
Verwandte Themen