Frage

Wenn ich diesen Typ:

puts 'repeat' * 3

ich:

>> repeat repeat repeat

Aber es funktioniert nicht, wenn ich dies tun:

puts 3 * 'repeat'

Warum?

War es hilfreich?

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
scroll top