类成员变量和方法名称冲突

时间:2015-12-11 20:14:00

标签: ruby member-access

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

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

不幸的是,我不能改变它,因为它是第三方。

2 个答案:

答案 0 :(得分:2)

您可以使用instance_variable_get

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

答案 1 :(得分:0)

您可以添加其他名称的阅读器方法:

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