Para dar un pequeño contexto sobre cómo entiendo el problema.¿Por qué el operador splat/unary cambia el valor asignado a cuando se llama a p antes de * a = ""?
Usando splat recoger en una cadena envía: to_a o: to_ary a la cadena
class String
def method_missing method, *args, &block
p method #=> :to_ary
p args #=> []
p block #=> nil
end
end
*b = "b"
así que estaba pensando que redefinir el: Método to_ary sería lo que busco.
class String
def to_ary
["to_a"]
end
end
p *a = "a" #=> "a"
p a #=> "a"
*b = "b"
p b #=> ["to_a"]
Ahora esto me confunde hasta el final.
Imprimir el resultado de * a = "a" cambia el valor asignado a?
Para demostrar aún más
class String
def to_ary
[self.upcase!]
end
end
p *a = "a" #=> "a"
p a #=> "a"
*b = "b"
p b #=> ["B"]
derecho. Se trata de la precedencia. 'p * a =" a "' significa 'p (* (a =" a "))', no 'p (* a =" a ")'. –
Sí, exactamente, lo edité para agregar un poco de una nota aclaratoria. – robbrit