Così, mentre mi sto muovendo attraverso "Scala per gli impazienti" mi sono chiesto: puoi usare un ciclo di Scala for senza sequenza?Per ciclo in scala senza sequenza?
Ad esempio, esiste un esercizio nel libro che richiede di creare un oggetto contatore che non può essere incrementato oltre Integer.MAX_VALUE. Al fine di testare la mia soluzione, ho scritto il seguente codice:
var c = new Counter
for(i <- 0 to Integer.MAX_VALUE) c.increment()
Questo genera un errore: le sequenze non possono contenere più di elementi Int.MaxValue. Mi sembra che Scala stia inizialmente assegnando e popolando un oggetto sequenza, con i valori da 0 a Integer.MaxValue, e quindi facendo un ciclo foreach su quell'oggetto sequenza.
mi rendo conto che avrei potuto fare questo, invece:
var c = new Counter
while(c.value < Integer.MAX_VALUE) c.increment()
Ma esiste un modo per fare un tradizionale stile C per ciclo con l'istruzione for?
Wow, una risposta impegnativa, ma buona. Sto solo imparando Scala, quindi hai usato un sacco di termini con cui ho a malapena familiarità, ma grazie. –
La definizione di 'fromTo' può essere ulteriormente semplificata utilizzando il metodo' iterate' sull'oggetto companion 'Stream' (o' Iterator'). Qualcosa sulla falsariga di: 'def fromTo (from: Int, to: Int) = Stream.iterate (from, to - from) (_ + 1)'. Ma usare 'from until to' è più idiomatico e raggiunge la stessa cosa. –