gpt4 book ai didi

ruby - 扩展内置类是正确的 Ruby 风格吗?

转载 作者:数据小太阳 更新时间:2023-10-29 07:42:34 24 4
gpt4 key购买 nike

我意识到这个问题对于 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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com