2011-11-22 36 views
0

通過在O'reilley書類部分工作,他們似乎表明下面應該工作:NoMethodError O'Reilley例如

class Point 
    def initialize(x,y) 
    @x, @y = x, y 
    end 

    def x 
    @x 
    end 

    def y 
    @y 
    end 

    def to_s 
    "(#@x,#@y)" 
    end 
end 

p = Point.new(5,0) 
q = Point.new(p.x*2, p.y*2) 
q.x = 0 
puts q.x 

從理論上講,我期待它打印0,而不是我的編譯器在嘗試執行q.x = 0時返回NoMethodError。有什麼東西會跳出來嗎?

+1

'「(#@ x,#@ y)」'應該是「」(#{@ x},#{@ y})「'。 – steenslag

回答

0

該代碼不應該工作,因爲沒有方法x=定義(根據錯誤消息)。網上可能有勘誤表嗎?

+0

不確定它是否是勘誤,但肯定沒有在文中明確定義,謝謝您的迴應! –

0

在Ruby中,類賦值操作又是另一種方法,所以你應該添加下列代碼:

class Point 
    def x=(value) 
    @x = value 
    end 

    def y=(value) 
    @y = value 
    end 
end 
0

當你在點X類二傳手QX = 0才能發揮作用

def x=(x) 
    @x=x 
end