块和物体

发布于 2025-01-02 07:35:03 字数 348 浏览 0 评论 0原文

我有一个像这样的对象

class SomeObject
  def initialize &block
    # do something
  end
end

class AnotherObject < SomeObject
  def initalize &block
    super
    # do something with block
  end
end

当在AnotherObject中调用super时,该块似乎被传递给SomeObject。这是正确的行为吗?还有什么办法可以避免这种行为吗?

I have an object like this

class SomeObject
  def initialize &block
    # do something
  end
end

class AnotherObject < SomeObject
  def initalize &block
    super
    # do something with block
  end
end

When super is called in AnotherObject, the block seems to be passed to SomeObject. Is this the right behaviour and is there away round it?

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

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

发布评论

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

评论(1

我一向站在原地 2025-01-09 07:35:03

根据 rubyspec 这是正确的行为,即使你向 super 传递显式参数(即 super('foo')

如果你不想传递该块,你可以只传递一个不执行任何操作的块,尽管这并不完全是同样的事情(例如,如果方法根据 block_given? 更改其行为? )

这似乎

super(&nil)

是一种完全不向 super 传递任何块的方法,尽管我在 ruby​​ 规范中找不到这种方法。

According to rubyspec this is the correct behaviour, even if you pass explicit arguments to super (i.e. super('foo'))

If you don't want to pass that block, you could just pass a block that does nothing, although this isn't quite the same thing (e.g. if the method changes its behaviour based on block_given?)

It appears that

super(&nil)

is a way to pass no block at all to super, although I couldn't find this in ruby spec.

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