seguenti corsi Scala il Coursera, Martin Odersky hanno mostrato un codice di esempio che è:Perché l'intervallo viene trasformato in un vettore dopo l'operazione della mappa?
1 to 5 map (i => i*i)
E ha detto che il Range
si trasforma in una Vector
perché condividono la stessa interfaccia (IndexedSeq
) e il risultato non poteva essere rappresentato come (era più chiaro nel suo esempio poiché ha generato una coppia che non è rappresentabile come Range
).
Non sono sicuro di capire perché penso che abbia detto in precedenza che in un espressione il primo generatore determinerà il tipo di elemento che verrà restituito, e non sembra sempre vero, almeno per Range
.
E non sono sicuro di capire perché l'uscita è Vector
, perché Vector
potrebbe non essere l'unica altra implementazione che può rappresentare il risultato calcolato sopra.
Qualcuno può aiutarmi a capire questa parte per favore?
Quindi intendete che Scala importa implicitamente per impostazione predefinita alcuni CanBuildFroms impliciti e che alla fine potrei sostituirli o qualcosa del genere? È possibile, solo per capire, produrre qualcosa di diverso da un Vector in questo caso? –
@SebastienLorber - In effetti puoi! Cerca 'breakOut' come forse il modo più conveniente per farlo se alcuni altri impliciti potrebbero già essere applicabili, ad es. http://stackoverflow.com/questions/2592024 –
sì, se fornisci esplicitamente un builder valido puoi ottenere un'altra collezione come risultato – Arjan