Um einen kleinen Zusammenhang zu geben, wie ich das Problem verstehe.Warum ändert der Splat/Unary-Operator den zugewiesenen Wert a, wenn p vor * a = "" aufgerufen wird?
Splat Verwendung sammeln sich auf eine Zeichenfolge sendet: to_a oder: to_ary zum String
class String
def method_missing method, *args, &block
p method #=> :to_ary
p args #=> []
p block #=> nil
end
end
*b = "b"
So dass ich dachte, das neu zu definieren: to_ary Methode wäre, was ich bin nach.
class String
def to_ary
["to_a"]
end
end
p *a = "a" #=> "a"
p a #=> "a"
*b = "b"
p b #=> ["to_a"]
Jetzt verwirrt mich das zu keinem Ende.
Wird das Ergebnis von * a = "a" gedruckt, ändert sich der Wert, der einem?
Zur weiteren
class String
def to_ary
[self.upcase!]
end
end
p *a = "a" #=> "a"
p a #=> "a"
*b = "b"
p b #=> ["B"]
Rechts. Es geht nur um den Vorrang. 'p * a =" a "' bedeutet 'p (* (a =" a "))', nicht 'p (* a =" a ")'. –
Yup genau, ich bearbeitet, um ein bisschen eine klärende Notiz hinzuzufügen. – robbrit