Tengo el siguiente programa Ruby:
def swap (a,b) return a,b = b,a end puts swap(5,3)Esperaba la salida.
3 5Pero lo entiendo.
5 3 5¿Cual es la razón?
¡Gracias!
¿Por qué este método devuelve tres valores?
Debido a la declaración de return , Ruby intenta interpretar el lado derecho como una matriz y su código:
return a,b = b,ase evalúa como: (se agregan paréntesis para mayor claridad)
return [a, (b=b), a] es decir, una matriz de 3 elementos [a, b, a] (asignar b a sí mismo no hace nada)
Elimina la palabra clave return . En realidad está haciendo: return a, (b), a. donde (b = b)
def swap(a,b) a, b = b, a end puts swap(5,3)Producción
=> 3, 5En su programa: en la función de intercambio, el retorno que ha dado es return a,b = b,a eliminar a,b y escribir directamente return b,a . obtendrá el resultado esperado. Motivo: a return a,b = b,a es devolver primero el valor de a luego ejecutar b=b,a . Espero que esto pueda ayudarte
def swap (a,b) return b,a end puts swap(5,3)Producción
3 5