我想在模塊中放置一些代碼,如果某些方法未定義,則會引發錯誤。 該模塊依賴於此方法的外部定義,因爲此方法的實現對於所有類都是不同的。該代碼可以幫助開發人員儘早知道他們忘記實施該方法,而不是在他們嘗試使用該模塊的功能時。Ruby:如果沒有找到類方法,則在Module中引發錯誤
module MyModule
def self.included(klass)
raise "MyModule: please `def my_method` on #{klass}" unless klass.respond_to?(:my_method)
end
end
我可以很容易地在一個模塊包括定義產生一個錯誤,如果沒有定義的方法,但是由於大多數模塊都包含在文件的頂部,很可能是我要求的方法是在類中定義,但不包括我的模塊之前。
class MyClass
include MyModule
def self.my_method
# ...
end
end
這仍然引發錯誤:(
是否有可能只提出如果該方法確實在類定義中沒有定義?幾乎需要各種各樣的class.onload回調錯誤。如果沒有任何其他的想法,如何緩解的可能性,程序員可能包括我們的模塊沒有確定這個需要的方法?
我熟悉特徵類,是的,我試圖做類似靜態方法檢查。我的一位同事指出,我們可以將這種期望轉化爲對實現MyModule的模型的測試。我們可以有一個宏acts_as_my_module,我們可以將其與所有模型測試/規格混合使用。仍然不會大聲抱怨,並需要額外的程序員的奉獻精神,但是是最紅寶石般的 – Schneems
如果你使用rspec,你可以做這樣的事情http://relishapp.com/rspec/rspec-core/v/ 2-6/dir/example-groups /共享示例 – Schneems
考慮到所有事情,您可能確實需要一個作爲部署運行的工具,並在出現類似問題時停止部署。這聽起來像你知道已經但希望有替代:-) – Pat