Sovraccarico di metodo in scala

2

So che il sovraccarico del metodo non è consentito in Scala e ho letto alcuni post relativi ai motivi. Tuttavia, vedo alcune funzioni sovraccaricate nella libreria Scala (esempio: println). Voglio sapere come è fatto e se posso usare lo stesso meccanismo per alcuni dei miei metodi.

    
posta Codism 23.01.2013 - 16:30
fonte

1 risposta

8

Funzioni non possono essere sovraccaricate in Scala, è corretto. Ma println non è una funzione, è un metodo , e i metodi più possono essere sovraccaricati.

Non sono sicuro di cosa intendi con "Come è fatto". È fatto esattamente nello stesso modo in cui lo fai in ogni altra lingua che supporta il sovraccarico. Se vuoi due definizioni di un metodo con tipi diversi, scrivi due definizioni con tipi diversi:

def foo(arg: Int)    { println("I am overloaded for Int.")    }
def foo(arg: String) { println("I am overloaded for String.") }

foo(42)
// I am overloaded for Int.

foo("Hello")
// I am overloaded for String.

foo(1.0)
// error: overloaded method value foo with alternatives:
//  (arg: String)Unit <and>
//  (arg: Int)Unit
// cannot be applied to (Double)
//                  foo(1.0)
//                  ^

Il motivo per cui l'overloading function non è supportato è semplice: tecnicamente parlando, il termine non ha nemmeno senso, poiché "overloading" significa sostanzialmente (molto ampiamente) "binding diversi per lo stesso nome in base al contesto ". Ma le funzioni non hanno un nome, quindi l'intero concetto di avere diverse implementazioni legate allo stesso nome è privo di senso.

    
risposta data 23.01.2013 - 17:03
fonte

Leggi altre domande sui tag