EDIT: Continuo a ottenere voti positivi qui. Solo per la cronaca, non penso più che questo sia importante. Non ne ho avuto bisogno da quando l'ho pubblicato.Scala - mutable (var) riferimento parametro parametro
Vorrei fare seguito a Scala ...
def save(srcPath: String, destPath: String) {
if (!destPath.endsWith('/'))
destPath += '/'
// do something
}
... ma non riesco a Allucinante destPath
è un val. C'è un modo per dichiarare destPath
come var?
Nota: ci sono domande simili ma in tutte OP si voleva solo modificare l'array.
Si prega di non consiglio seguente:
La modifica dei dettagli i parametri di input è spesso visto come un cattivo stile e lo rende più difficile di ragionare sul codice.
Penso che sia valido nella programmazione imperativa (Scala consente entrambi, giusto?) E aggiungendo qualcosa come tmpDestPath
aggiungerebbe solo confusione.
MODIFICA: non fraintendere. So che le stringhe non sono modificabili e non desidero un riferimento come riferimento perché non desidero modificare i dati del chiamante. Voglio solo modificare il riferimento locale alla stringa che il chiamante mi ha fornito con la mia stringa (ad esempio orig + '/'). Voglio modificare tale valore solo nell'ambito del metodo corrente. Guarda, questo è perfettamente valido in Java:
void printPlusOne(int i) {
i++;
System.out.println("i is: " + i);
System.out.println("and now it's same: " + i);
}
non ho per creare nuova variabile e non devo calcolare i + 1 due volte.
Dopo il chiarimento la risposta è: non è possibile. – Debilski
Questo è quello che sospettavo. Ho intenzione di pubblicarlo su scala-dibattito. – woky
Bene, la comunità di Scala non è davvero favorevole alla possibilità di modificare direttamente i parametri di funzione, sia per valore che per riferimento. Il ragionamento è identico a quello del perché a Scala manca anche qualcos'altro dal tuo esempio: l'operatore unario '++' per i tipi numerici. Tali cose sono il riflesso di uno stile di programmazione non funzionale, orientato agli effetti collaterali, che è qualcosa che Scala generalmente ti incoraggia ad evitare. Così com'è, se vuoi mutare ripetutamente un parametro di funzione, devi prima memorizzarlo in un 'var', il che rende le tue intenzioni più chiare, comunque! – Destin