如何访问类实例变量VS类方法

时间:2013-12-09 20:10:11

标签: ruby

我最近遇到了一个概念性的ruby问题,即通过类而不是匹配的类方法访问类实例变量。例如......

class Test
  @foo = nil
  def self.foo foo
    @foo = foo
  end
end

如何在不重命名@foo的情况下从Test访问self.foo?显然有很简单的方法,但这更像是一个功能性的Ruby问题,而不是实际的问题。

2 个答案:

答案 0 :(得分:3)

使用Module#class_evalObject#instance_variable_get

class Test
  @foo = nil
  def self.foo foo
    @foo = foo
  end
end

Test.foo(12)
Test.class_eval('@foo') # => 12
Test.instance_variable_get('@foo') # => 12

答案 1 :(得分:0)

我更明确地命名了setter并提供了一个明确的类getter ...

@foo = nil

def self.foo=(foo)
    @foo = foo
end

def self.foo
  @foo
end