如何从JRuby中的匿名类访问父类变量?
(不使用静态变量)
class MyJRubyClass
def initialize
@var1 = 1
@var2 = Class.new{
def Method1
@var1 = @var1 + 1
print @var1
end
}.new
@var2.Method1()
end
end
谢谢。
答案 0 :(得分:1)
总是需要一点时间(和练习)来习惯新语言。 具有“独占”父类访问权限的Java内部类的概念在Ruby中是不够的。
虽然它对相关类在内部协作方面很有用,但从OOP角度来看,它并不幸运,因为对象应该是使用消息协作的“黑盒子”。这是Ruby的方法。
另一方面,Ruby没有隐藏任何东西,因为它有反射API,例如检索实例变量(该示例更喜欢暴露属性读取器/写入器):class MyJRubyClass
attr_accessor :var1
def initialize
@var1 = 1
klass2 = Class.new do
def initialize(parent); @parent = parent end
def Method1
print @parent.var1 = @parent.var1 + 1
# without attr accessor :
#var1 = @parent.instance_variable_get(:@var1)
#@parent.instance_varialbe_set(:@var1, var1 + 1)
end
end
@var2 = klass2.new(self)
@var2.Method1()
end
end