我想在 Ruby 脚本中禁用模块的rm\_rf
方法。FileUtils
当foo.rb
包含:
FileUtils.rm_rf(file)
它不应该由以下人员运行:
Daemons.run("foo.rb", some_options)
并且应该给出错误消息。
Daemons
能做到这一点吗?或者其他一些库可以简单有效地做到这一点吗?
这是您想要做的事情的大致轮廓。
除非您将旧方法定义为其他方法,否则使用alias_method
可能不是一个好主意;这里的方法被定义了。这种方法的危险在于内部行为可能会以预期的方式受到影响,例如,允许的方法在内部使用不允许的方法。
以下是单例(类)方法,同样的逻辑可以用于实例方法。有几种方法可以实现,这只是一种,作为指导。
> 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,它们可能提供也可能不提供您想要的行为(不确定您需要它做什么)。