JRuby 匿名 类
JRuby anonymous classes
如何在 JRuby 中从匿名 class 访问父 class 变量?
(不使用静态变量)
class MyJRubyClass
def initialize
@var1 = 1
@var2 = Class.new{
def Method1
@var1 = @var1 + 1
print @var1
end
}.new
@var2.Method1()
end
end
谢谢。
习惯一门新语言总是需要一些时间(和练习)。
Java 的内部 class 具有 'exclusive' 父级 class 访问权限的概念在 Ruby.
中是不够的
虽然它对相关的 class 对象在内部协作很有用,但从 OOP 的角度来看,它并不幸运,因为对象应该 "black-boxes" 使用消息进行协作。这是某种程度上 Ruby 的方法。
另一方面 Ruby 没有隐藏任何东西,因为它有反射 API,例如检索实例变量(该示例更喜欢公开属性 reader/writer):
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
如何在 JRuby 中从匿名 class 访问父 class 变量?
(不使用静态变量)
class MyJRubyClass
def initialize
@var1 = 1
@var2 = Class.new{
def Method1
@var1 = @var1 + 1
print @var1
end
}.new
@var2.Method1()
end
end
谢谢。
习惯一门新语言总是需要一些时间(和练习)。 Java 的内部 class 具有 'exclusive' 父级 class 访问权限的概念在 Ruby.
中是不够的虽然它对相关的 class 对象在内部协作很有用,但从 OOP 的角度来看,它并不幸运,因为对象应该 "black-boxes" 使用消息进行协作。这是某种程度上 Ruby 的方法。
另一方面 Ruby 没有隐藏任何东西,因为它有反射 API,例如检索实例变量(该示例更喜欢公开属性 reader/writer):
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