Per dare un piccolo contesto intorno a come ho capito il problema.Perché l'operatore splat/unario modifica il valore assegnato a quando p viene chiamato prima di * a = ""?
Utilizzando splat raccogliere su una stringa invia: to_a o: to_ary alla stringa
class String
def method_missing method, *args, &block
p method #=> :to_ary
p args #=> []
p block #=> nil
end
end
*b = "b"
Stavo pensando che ridefinire il: metodo di to_ary sarebbe quello che sto cercando.
class String
def to_ary
["to_a"]
end
end
p *a = "a" #=> "a"
p a #=> "a"
*b = "b"
p b #=> ["to_a"]
Ora questo mi confonde a non finire.
La stampa del risultato da * a = "a" modifica il valore assegnato a a?
Per dimostrare ulteriormente
class String
def to_ary
[self.upcase!]
end
end
p *a = "a" #=> "a"
p a #=> "a"
*b = "b"
p b #=> ["B"]
destro. È tutto sulla precedenza. 'p * a =" a "' significa 'p (* (a =" a "))', non 'p (* a =" a ")'. –
Sì, ho modificato per aggiungere un po 'di una nota di chiarimento. – robbrit