我的项目依赖于太阳黑子,太阳黑子依赖于progress_bar.progress_bar定义了一个被调用的类(在任何模块/命名空间之外)ProgressBar.
我的测试代码依赖于minitest-reporter,而后者依赖于ruby-progressbar.ruby-progressbar定义了一个类(也在任何模块/命名空间之外)ProgressBar.
作为Ruby的新手,我花了很多时间来追踪这两个ProgressBar类是冲突的事实.我知道如何命名我自己的代码来防止这样的问题,但有没有办法解决第三方代码中的这种冲突?
更新:
minitest-reporter的所有者非常友好地将他对(显然已被遗弃的)ProgressBar的使用替换为另一个进度库PowerBar.所以这解决了我的问题.但是猜猜 - PowerBar还会污染全局命名空间!这似乎在Ruby中是病态的......
And*_*imm 10
如果你面对
# alice_bad_code.rb
class ProgressBar
def initialize
puts "Alice bad code progress bar created"
end
end
class AliceBadCode
def initialize
@progress_bar = ProgressBar.new
end
end
Run Code Online (Sandbox Code Playgroud)
和
# bob_bad_code.rb
class ProgressBar
def initialize
puts "Bob bad code progress bar created"
end
end
class BobBadCode
def initialize
@progress_bar = ProgressBar.new
end
end
Run Code Online (Sandbox Code Playgroud)
然后我会尝试类似的东西
require "alice_bad_code"
class AliceBadCode
ProgressBar = ::ProgressBar
end
Object.send(:remove_const, "ProgressBar")
require "bob_bad_code"
class BobBadCode
ProgressBar = ::ProgressBar
end
Object.send(:remove_const, "ProgressBar") # Just in case
Run Code Online (Sandbox Code Playgroud)
欢迎来到Ruby元编程!
但是,修补第三方库的最佳方法是不要对其进行修补,并按照Jorg W Mittag的回答提交错误报告.
你真的无能为力。
\n| 归档时间: |
|
| 查看次数: |
1490 次 |
| 最近记录: |