NoMethodError O'Reilley 示例

发布于 2024-12-17 04:16:18 字数 370 浏览 1 评论 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执行qx = 0。你们有什么事情跳出来吗?

Working through the classes section in the O'reilley book and they seem to be indicating the below should work:

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

In theory, I'm expecting it to print 0, instead my compiler is returning a NoMethodError upon trying to perform q.x = 0. Anything jumping out at you guys?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

腻橙味 2024-12-24 04:16:18

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

That code should not work, as there is no method x= defined (as per the error message). There might be an errata online?

善良天后 2024-12-24 04:16:18

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

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

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

In Ruby, an assignment operation for classes is yet another method, so that you should add following to your code:

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

  def y=(value)
    @y = value
  end
end
对岸观火 2024-12-24 04:16:18

qx = 0 仅当 Point 类中有 x 的 setter 时才有效

def x=(x)
  @x=x
end

q.x = 0 can work only when you have a setter for x in Point class

def x=(x)
  @x=x
end
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文