加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

是否有适当的Ruby风格来扩展内置类?

发布时间:2020-12-17 01:47:10 所属栏目:百科 来源:网络整理
导读:我意识到这个问题对于StackOverflow来说可能太哲学了,但是我想知道基类化内置类来扩展它们的功能是否被认为是“好”的 Ruby风格. 例如. class Grades Array def sum sum = 0 self.each do |num| sum += num end return sum end def avg self.sum/self.length
我意识到这个问题对于StackOverflow来说可能太哲学了,但是我想知道基类化内置类来扩展它们的功能是否被认为是“好”的 Ruby风格.

例如.

class Grades < Array
  def sum
    sum = 0
    self.each do |num|
      sum += num
    end
    return sum
  end
  def avg
    self.sum/self.length
  end
end

现在,Grades对象在构建时看起来像数组,但是具有我想要访问的额外sum和avg函数.它是“更好”的样式,不是基类Array,而是将此功能添加到通用对象?

解决方法

是.

一般来说,每个人都可以自由地“修补”Ruby中的所有内容,从你编写的类,到比你写的更重要的类,到库类.

但是,一般的计算风格指南是,如果你的班级做了所有事情,它什么都不做.您的示例有效地访问each()和length(),但是您的新Grades类现在公开了每个Array方法,包括那些您可能不想要调用的方法,包括某些cretin有朝一日可以使用的那些和猴子补丁!因此,如果您的Grades类非常公开(由整个程序使用),您可能需要考虑委派.

另一个指南 – 在某些语言中应用的比其他语言更多 – 是你永远不应该继承的,除非你覆盖一个方法,以实现多态.包括我在内的整个Ruby社区的另一个规则是享受自由的自由.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读