Class成员变量和方法名冲突

Class member variable and method name collision

我正在使用第 3 方库,我试图访问一个 class 成员变量,但不幸的是还有一个同名的方法。

class Test
  attr_writer :var

  def var
    "some other stuff that is not var"
  end
end

test = Test.new()

# Returns result of function but I need variable contents
test.var

很遗憾,我无法更改它,因为它是第 3 方。

您可以使用 instance_variable_get:

test = Test.new
test.instance_variable_get(:@var)

您可以使用其他名称添加 reader 方法:

class Test
   def var_reader
       @var
   end
end

这可能比直接使用 instance_variable_get 更好,如果您不止一次需要它或者可能需要围绕

的一些额外逻辑

在 ruby-2.1+ 上,这可以通过细化更优雅:

module TestRefinement
  refine Test do
    def var_getter
      @var
    end
  end
end

using TestRefinement
a.var_getter