Perché Scala utilizza l'operatore '_' per l'importazione del pacchetto anziché '*' come in Java?


17

Secondo me, una delle cose più belle di Scala è la sua interoperabilità con Java e la sua sintassi simile. Una cosa che ho trovato strana è l'uso _dell'operatore per l'importazione dei pacchetti wilcard invece *dell'operatore utilizzato in Java.

Esiste un motivo tecnico per l'utilizzo _anziché *? In caso contrario, perché è stato fatto questo cambiamento?


Questa potrebbe essere solo una cosa funzionale. So che Haskell usa _ in alcuni punti per agire come un carattere jolly / valore non specificato.
KChaloux,

Risposte:


36

In Scala, *è un identificatore valido. Si potrebbe scrivere:

val * = "trollin'"
println(*)

Con il risultato che:

trollin'

Si potrebbe scrivere una classe chiamata *come tale:

class * {
  def test():String = {
    "trollin'"
  }
}

Quindi, considerato questo, quando ho una classe *nel pacchetto us.hexcodere scrivo:

import us.hexcoder.*

Diresti che desideri importare una classe con il nome *. Per questo motivo, Scala doveva utilizzare un altro simbolo per indicare un'importazione con caratteri jolly. Per qualsiasi motivo, hanno deciso di utilizzare _come simbolo jolly.


9
La domanda diventa quindi, perché * è stato scelto come identificativo valido e _ come carattere jolly?
Mike Partridge,

2
Anche se ho più voti, questa è la risposta più corretta. Mai sentito parlare di * come identificatore prima d'ora.
Michael Brown,

1
@MikeBrown È valido anche in Lisp. Ecco un esempio in Scheme

18
@MikePatridge Quasi sicuramente perché Scala definisce tutti i suoi operatori come funzioni e consente allo sviluppatore di definire i propri operatori in quanto tali. Non esegue una sintassi per casi speciali per gli operatori e *deve essere inclusa per la moltiplicazione. Quindi un altro personaggio meno comune doveva essere scelto come personaggio riservato.
KChaloux,

3
Il carattere _ assomiglia a uno spazio vuoto (come in "riempi lo spazio vuoto"), quindi se Scala lo ha preso in prestito da qualche altra parte o se ne è uscito da solo, ha senso usarlo come carattere jolly.
Michael Shaw,

13

Nei linguaggi funzionali, il carattere _ è comunemente usato per dire "Non mi interessa questo parametro" o "qui può andare tutto". L'estensione di tale valore alle importazioni dello spazio dei nomi ha senso.


2

Oltre alla risposta di Glenn, importè un'affermazione valida ovunque in Scala e puoi includere importun oggetto o un membro di istanza nell'ambito. Poiché *è ovviamente un membro di molte classi, non può essere utilizzato come carattere jolly per l' importistruzione. Quindi finisci con una stringa che non deve essere un identificatore valido.

_viene in mente. Il fatto che sia utilizzato in altri luoghi per un significato diverso (tipo esistenziale, funzione come istanza) è anche dovuto allo stesso problema.


Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.