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
我正在使用第 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