gpt4 book ai didi

ruby - 我应该为 Ruby 中的类静态变量使用类变量还是类实例变量?

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

class Something
@@variable = 'Class variable'

def give_me
@@variable
end
end

class OtherThing
@variable = 'Instance variable with an interface'

class << self
attr_accessor :variable
end

def give_me
self.class.variable
end
end

p Something.new.give_me
p OtherThing.new.give_me

我想知道的是,我应该使用哪一个?各自的优缺点是什么?

类变量是:

  1. 私有(private)的,除非你做一个接口(interface)
  2. 在继承之间共享
  3. 写起来更短

类实例变量是:

  1. 公共(public)的,因为您必须使用接口(interface)来访问它们
  2. 不在继承之间共享,但在继承时设置为nil
  3. 写的比较长

我还应该注意什么?

最佳答案

我最近发现 ActiveSupport 定义了 class_inheritable_accessor ,它做了类实例变量所做的事情,优点是对象不跨继承共享,并且您可以在子类化时为变量设置默认值。

class Foo
class_inheritable_accessor :x, :y
end

Foo.x = 1

class Bar < Foo
end

Bar.x #=> 1
Bar.x = 3
Bar.x #=> 3
Foo.x #=> 1

更多信息 here

只是为了完整性:在所提供的两个选项中,我更喜欢使用类实例变量,因为这通常是预期的行为。

关于ruby - 我应该为 Ruby 中的类静态变量使用类变量还是类实例变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7072269/

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