我意识到这个问题对于 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
方法,包括您可能不希望调用的方法 ~ 以及某些白痴可能有一天会去使用猴子补丁的方法!因此,如果您的 Grades
类非常公开(由您的整个程序使用),您可能需要考虑委托(delegate)。
另一条准则——在某些语言中比其他语言更适用——你永远不应该继承,除非你随后重写一个方法,以实现多态性。包括我在内的整个 Ruby 社区都喜欢自由打破的另一条规则。
关于ruby - 扩展内置类是正确的 Ruby 风格吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16504369/