让我们说例如我有一个带有私有方法栏的Foo类。
class Foo
private
def bar
# private Foo stuff
end
end
我需要bar方法保持私有和未使用,但我还需要能够调用相同的方法名称并将其行为重定向到类Baz的公共方法栏。
class Baz
def bar
# public access bar
end
end
因此,如果没有触及Foo的私人栏,我可以为任何私有方法调用实现类似method_missing的内容。
class Foo
def private_methods(meth, *args, &block) # something like method_missing
if meth.is_private?
Baz.send meth, *args, &block
end
end
end
Foo是一个脾气暴躁的人,不想分享他的酒吧。任何人敲门要求他的酒吧,他都会沿着通往Baz的房子的路向他们开放酒吧。
我希望它能像方法一样缺失。所以我不必定义每一种方法。
答案 0 :(得分:1)
为什么不按照建议使用method_missing
?
def method_missing(meth, *args)
puts "method_missing invoked with meth = #{meth}"
if(meth==:bar)
Baz.new.bar
else
super
end
end
然后
Foo.new.bar
#=> method_missing invoked with meth = bar
#=> public bar of Baz
调用 method_missing
是因为Foo
没有公共方法bar
。
假设Foo
有一个调用bar
的方法:
def call_bar
bar
end
然后,
Foo.new.call_bar
#=> private bar of Foo
正如所料。
答案 1 :(得分:0)
由于该方法存在,我认为您不能使用方法丢失。你可以做类似下面的事情
class Foo
def public_bar
#public bar
puts "public bar of Foo"
Baz.new.bar
end
private
def bar
#private
puts "private bar of Foo"
end
alias_method :private_bar, :bar
alias_method :bar, :public_bar
end
class Baz
def bar
puts "public bar of Baz"
end
end
因此,当您致电bar时,它会调用public_bar
Foo.new.bar
=> public bar of Foo
=> public bar of Baz
不确定这是否适用于您的方案,但值得一试