Ruby on rails 如何从ruby类外部获取值

Ruby on rails 如何从ruby类外部获取值,ruby-on-rails,ruby,metaprogramming,Ruby On Rails,Ruby,Metaprogramming,我试图从中解决练习1,但我不知道如何从a类及其实例中获取“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_varia

我试图从中解决练习1,但我不知道如何从a类及其实例中获取“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.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在最后一行击败了我

定义此类时,输出将是局部作用域变量
3

class A
  def initialize
    @a = 11
    @@a = 22
    a = 33
  end
  @a = 1
  @@a = 2
  a = 3
end        #=> 3
您可以访问实例和类变量,如下所示:

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
对于另一个值,如果在此类上调用
initialize
,并创建一个新对象,则将返回最后计算的表达式,该表达式将是局部变量
a

if A.respond_to?(:initialize, true)
  A.new.method(:initialize).call} #=> 33
end

您无法从其范围外访问
a
。它被称为“局部变量”是有原因的。不需要使用
方法(:initialize)
业务。只需发送即可。非常感谢,它很有帮助!不需要使用
方法(:initialize)
业务。只需发送即可。此外,您的响应检查有缺陷(您检查了错误的对象)并且不需要(
初始化
将在那里)