我正在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條經驗 獲得超6個贊
您可以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 關注
- 768 瀏覽
添加回答
舉報
0/150
提交
取消
