When I type this:
puts 'repeat' * 3
I get:
>> repeat repeat repeat
But it's not working if I do this:
puts 3 * 开发者_开发百科'repeat'
Why?
In Ruby, when you call a * b
, you're actually calling a method called *
on a
. Try this, for example:
a = 5
=> 5
b = 6
=> 6
a.*(b)
=> 30
c = "hello"
=> "hello"
c.*(a)
=> "hellohellohellohellohello"
Thus <String> * <Fixnum>
works fine, because the *
method on String
understands how to handle integers. It responds by concatenating a number of copies of itself together.
But when you do 3 * "repeat"
, it's invoking *
on Fixnum
with a String
argument. That doesn't work, because Fixnum
's *
method expects to see another numeric type.
精彩评论