Warum ist nicht `„repeat“* 3` das gleiche wie` 3 * „repeat“ `in Ruby?
-
23-09-2019 - |
Frage
Wenn ich diesen Typ:
puts 'repeat' * 3
ich:
>> repeat repeat repeat
Aber es funktioniert nicht, wenn ich dies tun:
puts 3 * 'repeat'
Warum?
Lösung
In Ruby, wenn Sie a * b
nennen, die Sie anrufen tatsächlich eine Methode *
auf a
genannt. Versuchen Sie dies, zum Beispiel:
a = 5
=> 5
b = 6
=> 6
a.*(b)
=> 30
c = "hello"
=> "hello"
c.*(a)
=> "hellohellohellohellohello"
So funktioniert <String> * <Fixnum>
in Ordnung, weil die *
Methode auf String
versteht, wie ganze Zahlen zu handhaben. Es reagiert darauf, indem eine Reihe von Kopien von sich selbst zusammen verketten.
Aber wenn man 3 * "repeat"
tun, es ist Berufung *
auf Fixnum
mit einem String
Argumente. Das funktioniert nicht, weil Fixnum
der *
Methode erwartet einen anderen numerischen Typ zu sehen.
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow