あなたのやりたいことの概要を以下に示します。
alias_method
を使用すると、古いメソッドを別のものに定義しない限り、良い考えではない可能性があります。ここではメソッドが定義されています。このアプローチの危険性は、想定される方法で内部動作が影響を受ける可能性があることです。たとえば、許可されたメソッドでは内部的に許可されないメソッドが使用されます。
シングルトン(クラス)メソッドの場合、インスタンスのメソッドには同じロジックを使用できます。これは実装可能ないくつかの方法がありますが、これはガイドとしての意味の1つです。
> FileUtils.pwd
=> "/home/dave"
> FileUtils.cp '.bashrc', 'tmpbashrc'
=> nil
> class Object
* def deimplement_singleton_methods *methods
* methods.each do |msym|
* define_singleton_method msym do |*args|
* raise NotImplementedError.new "#{msym} not implemented"
* end
* end
* end
* end
> FileUtils.deimplement_singleton_methods :cp
> FileUtils.pwd
=> "/home/dave"
> FileUtils.cp '.bashrc', 'tmpbashrc'
NotImplementedError: cp not implemented
from (pry):10:in `block (2 levels) in deimplement_singleton_methods'
も、またはあなたが(あなたはそれが何をする必要があるかわからない)したい動作を提供しない場合がありModule::undef_methodとModule::remove_method、あります。
ライブラリを必要とせず、no-opに再定義するだけです。 –
@DaveNewton許可リストを作成してから、すべてのモジュールの他のすべてのメソッドを無効にすることはできますか? – nttstar
確か;すべてのメソッドを取得し、リスト内のメソッドを拒否し、残りのメソッドを再定義します。 –