【问题标题】:Ruby - Inherit Method OrderRuby - 继承方法顺序
【发布时间】:2015-12-27 06:33:05
【问题描述】:

有没有办法做到这一点?

class Parent
  def stuff
    #error checking that needs to go first
  end
end

class Young < Parent
  def stuff
    super
    p 'doing new stuff here'
  end
end

这段代码看到通过super调用父方法,然后它永远不会返回到“做新东西”部分。

【问题讨论】:

  • 它确实返回到'doing new stuff here' 部分。可能实际代码退出或引发异常。
  • 哦,好吧。你想添加它作为我可以接受的答案吗?我应该删除我的帖子吗?
  • 您可以根据需要将其删除,也可以让社区将其关闭为不再可复制
  • 是的,删除它。现在它没有任何价值了。

标签: ruby inheritance methods super


【解决方案1】:

继承有时会变得很麻烦并且容易出错。除非您有很多孩子使用“父”类的特定操作,否则我建议您简单地捕获模块中所需的所有操作并使用 mixin 包含在内。它更容易和直接。

module Stuff
  def check_errors
    #error checking that needs to go first
  end
end

class Young
  include Stuff

  check_errors
  p 'doing new stuff here'
end

【讨论】:

  • 所以您建议始终使用 mixins 而不是继承,除非“您有很多孩子正在使用“父”类的特定操作”?跨度>
  • 没说总是。他的例子似乎不必要地使用了继承。我建议 mixins 更直接。如果你可以通过使用 mixin 得到你想要的,我建议你这样做。
  • 所有可以用继承完成的事情也可以用mixins完成。说除非你别无选择,否则你应该使用其中一个,这太笼统了。此外,由于该问题旨在了解继承的工作原理,因此提供替代方案并不能回答 IMO 的问题。
  • @ndn 我明白你的意思。我的立场是帮助提问者理解他想要完成的事情。无论使这种情况发生,都是一个答案。 Mixins IMO 比继承更容易理解和“即插即用”。话虽如此,感谢您的意见并帮助我学习适当的堆栈礼仪。
  • Sandi Metz 就继承的缺点做了一个精彩的演讲 youtube.com/watch?v=OMPfEXIlTVE 尽管在这次演讲中她使用依赖注入来解决这个问题 ;)
猜你喜欢
  • 2020-03-23
  • 1970-01-01
  • 1970-01-01
  • 2011-10-24
  • 2014-03-06
  • 2016-08-09
  • 2014-09-12
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多