2011-09-29 20 views
29

Eventuali duplicati:
Functions vs methods in Scala
What is the difference between def foo = {} and def foo() = {} in Scala?Differenza tra parentesi funzione con e senza

In scala possiamo definire

def foo():Unit = println ("hello") 

o

def foo:Unit = println ("hello") 

So che non sono uguali ma qual è la differenza e che deve essere utilizzata quando?

Se è stata data una risposta in precedenza, indicarmi il collegamento.

+0

@MatthewFarwell Non credo che la domanda collegata risponda alla domanda Parens. –

+0

E vedi anche http://stackoverflow.com/questions/6939908/scala-functions-with-no-arguments –

+1

Domanda http://stackoverflow.com/questions/7409502/what-is-the-difference-between-def -foo-and-def-foo-in-scala è esattamente lo stesso. – paradigmatic

risposta

37

Un metodo Scala di 0-arità può essere definito con o senza parentesi (). Questo è usato per segnalare all'utente che il metodo ha qualche tipo di effetto collaterale (come la stampa di std out o distruzione di dati), in contrapposizione a quello senza, che può essere implementato successivamente come val.

Vedi Programming in Scala:

Tali metodi senza parametri sono abbastanza comuni in Scala. Al contrario, i metodi definiti con parentesi vuote, come ad esempio def height(): Int, sono chiamati metodi paren vuoti. La convenzione raccomandata è di usare un metodo senza parametri ogni volta che non ci sono parametri e il metodo accede allo stato mutabile solo leggendo i campi dell'oggetto contenente (in particolare, non cambia lo stato mutabile).

Questa convenzione sostiene il principio di accesso uniforme [...]

In sintesi, è incoraggiato stile a Scala per definire i metodi che non prendono i parametri e non hanno effetti collaterali come i metodi senza parametri, vale a dire, lasciando fuori dal parentesi vuote. D'altra parte, non dovresti mai definire un metodo che abbia effetti collaterali senza parentesi, perché le invocazioni di quel metodo apparirebbero come una selezione di campi.

+0

Puoi espandere la definizione di "effetti collaterali"? – Jus12

+2

@ Jus12 che sarà tutta un'altra domanda, da cui puoi cercare o vedere Wikipedia - http://en.wikipedia.org/wiki/Side_effect_(computer_science) –

Problemi correlati