gpt4 book ai didi

ruby - Ruby 类变量不好吗?

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

当我实现“实例”/单例类型模式时,RubyMine 通知说使用类变量被认为是错误的形式。

我得到的唯一信息是使用类变量会使继承变得有点古怪。下面的代码会给我带来问题还有其他原因吗?

class Settings
private_class_method :new
attr_accessor :prop1
attr_accessor :prop2

@@instance = nil

def Settings.instance_of
@@instance = new unless @@instance
@@instance
end
def initialize
@prop2 = "random"
end
end

此外,在 Ruby 方面是否有更好的方法来实现相同的目标以确保只有一个实例?

最佳答案

Ruby 中类变量的问题在于,当您从一个类继承时,新类不会获得它自己的类变量的新副本,而是使用它从它的类继承的同一个变量父类(super class)。

例如:

class Car
@@default_max_speed = 100
def self.default_max_speed
@@default_max_speed
end
end

class SuperCar < Car
@@default_max_speed = 200 # and all cars in the world become turbo-charged
end

SuperCar.default_max_speed # returns 200, makes sense!
Car.default_max_speed # returns 200, oops!

推荐的做法是使用类实例变量(记住类只是 Ruby 中类 Class 的对象)。我强烈建议阅读第 14 章 Eloquent Ruby作者 Russ Olsen,其中详细介绍了该主题。

关于ruby - Ruby 类变量不好吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33762366/

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