如何从 class ruby 之外获取值
How to get the values from outside the class ruby
我正在尝试解决 http://ruby-metaprogramming.rubylearning.com/ 中的练习 1,但我不知道如何从 A class 及其实例中获取 "a" 变量。
代码如下:
class A
def initialize
@a = 11
@@a = 22
a = 33
end
@a = 1
@@a = 2
a = 3
end
我相信你在谈论 this exercise。
我不确定您如何从外部访问局部范围的变量。出于某种原因,它被称为本地范围。对于其他人:
定义class后,尝试:
A.instance_variable_get(:@a) # => 1
A.class_variable_get(:@@a) # => 2
A.new.instance_variable_get(:@a) # => 11
A.class_variable_get(:@@a) # => 22
编辑:我试了一下这段代码,我想我明白了:
a = class A
def initialize
@a = 11
@@a = 22
a = 33
end
@a = 1
@@a = 2
a = 3
end
A.instance_variable_get(:@a) # => 1
A.class_variable_get(:@@a) # => 2
a # => 3
A.new.instance_variable_get(:@a) # => 11
A.class_variable_get(:@@a) # => 22
A.new.method(:initialize).call # => 33 , basically we tricked Ruby into calling initialize method again, slick huh!
编辑:@RossMc 在最后一行击败了我
定义此 class 时,输出将是局部作用域变量 3
class A
def initialize
@a = 11
@@a = 22
a = 33
end
@a = 1
@@a = 2
a = 3
end #=> 3
您可以按如下方式访问实例和 class 变量;
A.instance_variable_get(:@a) #=> 1
A.class_variable_get(:@@a) #=> 2
A.new.instance_variable_get(:@a) #=> 11
A.class_variable_get(:@@a) #=> 22
对于另一个值,如果您在此 class 上调用 initialize
并创建一个新对象,这将 return 最后计算的表达式,这将是局部变量 a
if A.respond_to?(:initialize, true)
A.new.method(:initialize).call} #=> 33
end
我正在尝试解决 http://ruby-metaprogramming.rubylearning.com/ 中的练习 1,但我不知道如何从 A class 及其实例中获取 "a" 变量。
代码如下:
class A
def initialize
@a = 11
@@a = 22
a = 33
end
@a = 1
@@a = 2
a = 3
end
我相信你在谈论 this exercise。
我不确定您如何从外部访问局部范围的变量。出于某种原因,它被称为本地范围。对于其他人:
定义class后,尝试:
A.instance_variable_get(:@a) # => 1
A.class_variable_get(:@@a) # => 2
A.new.instance_variable_get(:@a) # => 11
A.class_variable_get(:@@a) # => 22
编辑:我试了一下这段代码,我想我明白了:
a = class A
def initialize
@a = 11
@@a = 22
a = 33
end
@a = 1
@@a = 2
a = 3
end
A.instance_variable_get(:@a) # => 1
A.class_variable_get(:@@a) # => 2
a # => 3
A.new.instance_variable_get(:@a) # => 11
A.class_variable_get(:@@a) # => 22
A.new.method(:initialize).call # => 33 , basically we tricked Ruby into calling initialize method again, slick huh!
编辑:@RossMc 在最后一行击败了我
定义此 class 时,输出将是局部作用域变量 3
class A
def initialize
@a = 11
@@a = 22
a = 33
end
@a = 1
@@a = 2
a = 3
end #=> 3
您可以按如下方式访问实例和 class 变量;
A.instance_variable_get(:@a) #=> 1
A.class_variable_get(:@@a) #=> 2
A.new.instance_variable_get(:@a) #=> 11
A.class_variable_get(:@@a) #=> 22
对于另一个值,如果您在此 class 上调用 initialize
并创建一个新对象,这将 return 最后计算的表达式,这将是局部变量 a
if A.respond_to?(:initialize, true)
A.new.method(:initialize).call} #=> 33
end