Я пытаюсь выяснить метод coerce
. когда я определил метод *
и метод coerce
. integer * Point
срабатывает coerce
, но "" * Point
не срабатывает. Почему?
Ошибка:
coerce.rb:34:in `*': no implicit conversion of Point into Integer (TypeError) from coerce.rb:34:in `<main>'
Код:
class Point
def initialize x,y
@x,@y = x,y
end
def * x
p "* called"
@x *= x
@y *= x
end
def coerce other
p 'coerce called'
if other.is_a? String
p "converted"
[self, other.to_i]
else
[self,other]
end
#[3,other]
end
end
p1= Point.new 1,1
p1*2
p p1
2*p1
p p1
p p1.coerce(2)
p "string test====="
"2" * p1
Выход:
"* called"
#<Point:0x00564f5de89dd0 @x=2, @y=2>
"coerce called"
"* called"
#<Point:0x00564f5de89dd0 @x=4, @y=4>
"coerce called"
[#<Point:0x00564f5de89dd0 @x=4, @y=4>, 2]
"string test====="
coerce.rb:34:in `*': no implicit conversion of Point into Integer (TypeError)
from coerce.rb:34:in `<main>'
Кто подскажет, почему и как заставить "2" * p1
работать?