在OS X的自制软件中,有一个DownloadStrategyDetector
课程,我正在进行点击,需要覆盖此课程中的几个方法以添加其他下载策略(他们是'非常小众,所以不被接受进入核心)。
我尝试简单地重新定义(见下文)我的Formula
类上面的类,试图覆盖默认定义,但是仍然使用该类的常规版本。
class DownloadStrategyDetector
def self.detect_from_url(url)
# ...
end
def self.detect_from_symbol(symbol)
# ...
end
end
有没有办法强制将某个类的所有用途用于特定的定义?这是使用类的默认定义结束调用的回溯。
我的代码位于tester.rb
,并间接调用加载resource.rb
的{{1}},这会覆盖我对download_strategy.rb
的定义。
回溯:
DownloadStrategyDetector
我也尝试了另一种策略,我在这里添加了一个挂钩到我的/usr/local/Library/Homebrew/download_strategy.rb:963:in `detect_from_symbol'
/usr/local/Library/Homebrew/download_strategy.rb:916:in `detect'
/usr/local/Library/Homebrew/resource.rb:144:in `url'
/usr/local/Library/Homebrew/software_spec.rb:62:in `url'
/usr/local/Library/Homebrew/formula.rb:1666:in `url'
/Users/camdennarzt/Developer/Ruby/homebrew-core/formula/tester.rb:68:in `<class:Tester>'
/Users/camdennarzt/Developer/Ruby/homebrew-core/formula/tester.rb:63:in `load_formula'
/usr/local/Library/Homebrew/formulary.rb:25:in `module_eval'
/usr/local/Library/Homebrew/formulary.rb:25:in `load_formula'
/usr/local/Library/Homebrew/formulary.rb:42:in `load_formula_from_path'
/usr/local/Library/Homebrew/formulary.rb:91:in `load_file'
/usr/local/Library/Homebrew/formulary.rb:82:in `klass'
/usr/local/Library/Homebrew/formulary.rb:78:in `get_formula'
/usr/local/Library/Homebrew/formulary.rb:215:in `factory'
/usr/local/Library/Homebrew/extend/ARGV.rb:29:in `block in resolved_formulae'
/usr/local/Library/Homebrew/extend/ARGV.rb:27:in `map'
/usr/local/Library/Homebrew/extend/ARGV.rb:27:in `resolved_formulae'
/usr/local/Library/Homebrew/cmd/reinstall.rb:10:in `reinstall'
/usr/local/Library/brew.rb:87:in `<main>'
类,并尝试使用别名交换方法:
DownloadStrategyDetector
但它只打印了以下内容,就好像该类从未重新打开一样:
class DownloadStrategyDetector
def self.singleton_method_added(name)
puts name
alias_method :detect_from_url, :detect_from_url_2 if name == :detect_from_url
alias_method :detect_from_symbol, :detect_from_symbol_2 if name == :detect_from_symbol
end
def self.detect_from_url_2(url)
# ...
end
def self.detect_from_symbol_2(symbol)
# ...
end
end