EDITAR: Sigo recibiendo votos aquí. Solo para que conste, ya no creo que esto sea importante. No lo he necesitado desde que lo publiqué.Scala - parámetro de método mutable (var) referencia
me gustaría hacer después de Scala ...
def save(srcPath: String, destPath: String) {
if (!destPath.endsWith('/'))
destPath += '/'
// do something
}
... pero no puedo por culpa destPath
es un val. ¿Hay alguna manera de declarar destPath
como var?
Nota: hay preguntas similares pero en todas OP solo quería modificar la matriz.
Por favor, no aconsejan siguiente:
mutación de los parámetros de entrada a menudo es visto como un mal estilo y hace que sea más difícil de razonar sobre el código.
Creo que es válido en la programación imperativa (Scala permite ambos, ¿verdad?) Y agregar algo como tmpDestPath
simplemente agregará desorden.
EDITAR: No malinterprete. Sé que las cadenas no son mutables y no quiero una referencia a la referencia porque no quiero modificar los datos de la persona que llama. Solo quiero modificar la referencia local a la cadena que el llamador me dio con mi cadena (por ejemplo, orig + '/'). Quiero modificar ese valor solo en el alcance del método actual. Mira, esto es perfectamente válido en Java:
void printPlusOne(int i) {
i++;
System.out.println("i is: " + i);
System.out.println("and now it's same: " + i);
}
que no tenga que crear nueva variable y no tengo para calcular i + 1 dos veces.
Después de la aclaración, la respuesta es: No se puede. – Debilski
Eso es lo que sospechaba. Voy a publicarlo en scala-debate. – woky
Bueno, la comunidad de Scala no va a estar realmente a favor de poder modificar directamente los parámetros de la función, ya sea por valor o por referencia. El razonamiento es el mismo que el de por qué a Scala también le falta algo más de su ejemplo: los operadores unarios '++' para tipos numéricos. Tales cosas apestan a un estilo de programación no funcional orientado a efectos secundarios, que es algo que Scala generalmente lo alienta a evitar. Tal como está, si quieres mutar repetidamente un parámetro de función, primero debes almacenarlo en una 'var', ¡lo que hace que tus intenciones sean más claras, de todos modos! – Destin