如何在Ruby中获得类似Java的效果?
class Outer {
final boolean switch
public Outer(boolean someSwitch) {
switch = someSwitch
}
class Inner {
public void doSomething() {
if (switch) {
//behave like this
} else {
//behave like that
}
}
}
别介意开关必须是最终的;在Scala中,它没有。无论如何。我的内部类存在于外部实例的范围内,这就是我喜欢它的方式。而且我不必将开关传递给每个单独的内部实例。
在Ruby中,我可以在另一个内部嵌套一个类,但它并不意味着超出命名空间。我怎样才能得到我想要的效果?我知道这个问题有点模糊,所以即使你不确定,也要随意捅它。
答案 0 :(得分:4)
Ruby中没有嵌套类,更多信息here。但Ruby很棒,因为如果它有帮助你就可以做到这一点。
module M
class Outer
attr_accessor :foo
def say_hello()
puts "Hello Outer '#{@foo}'"
Inner.new(self).say_hello()
end
private
class Inner
def initialize(parent)
@parent = parent
end
def say_hello()
puts "Hello Inner '#{@parent.foo}'"
end
end
end
end
instance = M::Outer.new
instance.foo = "foo values"
instance.say_hello
#=> Hello Outer 'foo values'
#=> Hello Inner 'foo values'