0

通过 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,而不是我的编译器NoMethodError在尝试执行时返回 a q.x = 0。有什么对你们跳出来的吗?

4

3 回答 3

0

该代码不应该工作,因为没有x=定义方法(根据错误消息)。网上可能有勘误?

于 2011-11-22T06:40:49.127 回答
0

在 Ruby 中,类的赋值操作是另一种方法,因此您应该在代码中添加以下内容:

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

  def y=(value)
    @y = value
  end
end
于 2011-11-22T06:41:36.593 回答
0

qx = 0 只有在 Point 类中有 x 的设置器时才能工作

def x=(x)
  @x=x
end
于 2011-11-22T06:41:55.010 回答