gpt4 book ai didi

ruby 在方法外初始化实例变量

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

作为实验,我写了一些看起来像这样的代码

class MyClass

@var = 100

def hello
p "hello"
end

end

我知道如果我执行 MyClass.new @var 没有在那个对象上定义,我认为这会定义 @var 在类 MyClass 上。

这有实际用途吗?

最佳答案

确实有一个用途:类变量。普通的 Ruby 类变量实现,@@在父类(super class)和它的子类之间共享相同的变量:

class A
@@v = 0
def self.v; @@v; end
def self.v=(val); @@v=val; end
end
class B < A; end
A.v #-> 0
A.v= 3 #-> 3
B.v #->3
B.v= 42 #-> 42
A.v #-> 42

显然,这是非常无用的(除了与类实例变量不同的事实,类变量也可以直接在实例方法中访问,而不是通过 self.class)。但是使用类实例变量的相同示例:

class A
@v = 0
def self.v; @v; end
def self.v=(val); @v=val; end
end
class B < A; end
A.v #-> 0
A.v= 3 #-> 3
B.v= 42 #-> 42
A.v #-> 3

此外,类实例变量可以利用所有已经为实例变量编写的元编程,如下所示:

class Foo
class << self
attr_accessor :v #Uses a class instance variable
end
end

关于ruby 在方法外初始化实例变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11597059/

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