我正在Ruby 1.9.2中编写一个定义几种方法的模块。当调用这些方法中的任何一个时,我希望它们中的每一个都首先执行特定的语句。module MyModule def go_forth a re-used statement # code particular to this method follows ... end def and_multiply a re-used statement # then something completely different ... endend但是我想避免将a re-used statement代码明确地放在每个方法中。有办法吗?(如果有关系,a re-used statement将在调用每个方法时打印其自己的名称。它将通过的某些变体来实现puts __method__。)
3 回答
ibeautiful
TA贡献1993条经验 获得超5个赞
您可以method_missing通过代理模块实现它,如下所示:
module MyModule
module MyRealModule
def self.go_forth
puts "it works!"
# code particular to this method follows ...
end
def self.and_multiply
puts "it works!"
# then something completely different ...
end
end
def self.method_missing(m, *args, &block)
reused_statement
if MyModule::MyRealModule.methods.include?( m.to_s )
MyModule::MyRealModule.send(m)
else
super
end
end
def self.reused_statement
puts "reused statement"
end
end
MyModule.go_forth
#=> it works!
MyModule.stop_forth
#=> NoMethodError...
- 3 回答
- 0 关注
- 720 浏览
添加回答
举报
0/150
提交
取消