gpt4 book ai didi

ruby - 在 Ruby 中,向实例的单例类添加方法的用例是什么?

转载 作者:太空宇宙 更新时间:2023-11-03 18:15:55 25 4
gpt4 key购买 nike

感谢其他一些帖子和阅读,我理解了单例/元类。我理解为什么我们想在类里面使用它们。但我仍然不明白为什么我们要在实例对象上使用它们。我还没有在实践中看到它。

我指的是这样的:

class Vehicle
def odometer_reading
# some code
end
end

my_car = Vehicle.new

def my_car.open_door
# some code
end

乍一看,这似乎是个坏主意,因为它会导致难以理解代码和调试。

我们为什么要这样做?什么时候这是一个好主意的例子有哪些?

最佳答案

一个例子是将它用于测试目的:创建模拟和双对象, stub 方法。调试就在附近:为您怀疑行为不当的特定对象重新定义日志记录方法,以便在调试 session 期间将日志信息直接打印到控制台(或打印更多信息)。

另一个例子是处理特殊情况——你可以这样做而不是继承。从一个经典示例开始,如果您使用两种类型的 Employee,例如 EngineerSalesPerson,其薪酬计算规则不同的是,你可以把共同的逻辑放在Employee类中,然后继承其他两个类并在那里实现他们自己的calculate_salary方法。现在,如果有一个离群值——一个明星销售员,你已经同意了不同的薪酬方案,一个 CEO 有一个非常特殊的方案,等等——而不是为这个特殊的员工创建一个完整的子类,你可以只定义这个代表该员工的特定对象的方法。

第三个示例是处理对象生命周期和性能注意事项。而不是在某些处理方法中有一个很长的各种状态的case。例如。对于在后台透明地缓存整个文件的文件读取类(我知道一种过于简单化的现实生活方法,但只是作为一个模型)所有读取请求,而文件没有完全读取应该检查是否请求的数据已经在缓存中或应该从磁盘读取。一旦文件被完全读取,它们总是从缓存中消失。不用 if(case 如果有更多状态)来处理这个问题,您可以简单地重新定义对象的 read 方法- 文件完全读取到缓存后的级别。对于这个简单的示例,它不会带来任何可观的性能优势(如果有的话),但对于更复杂的情况来说可能是值得的。

关于ruby - 在 Ruby 中,向实例的单例类添加方法的用例是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26265223/

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