Julia中修改第三方包原生函数并复用依赖的方法咨询
Julia修改第三方包函数并复用依赖的通用方法
你遇到的问题根源是:LibraryA里的vars属于包的私有符号(Julia包默认只对外导出指定符号,未导出的变量/函数外部无法直接访问),直接复制原函数代码到外部文件自然找不到这些依赖。下面是通用解决方案,无需针对特定包做调整:
1. 直接引用包内私有符号(临时测试用)
在你的bar.jl里,给所有原函数用到的私有符号加上包模块前缀,比如把vars改成LibraryA.vars:
# bar.jl function bar(args) # 保留原foo的逻辑,仅替换私有符号的引用方式 temp = LibraryA.vars * args # 你的修改内容 return temp + 1 end
修改后调用bar(args)就能正确找到包内的私有变量。
2. 在包模块内定义新函数(完整复用依赖)
如果原函数依赖大量私有符号,逐个替换太麻烦,可以用@eval把新函数直接定义在LibraryA的模块环境里,这样就能直接访问所有包内符号:
using LibraryA # 直接在LibraryA模块内定义bar函数 @eval LibraryA begin function bar(args) # 完全复制原foo的代码,无需修改任何符号 temp = vars * args # 你的自定义修改 return temp + 1 end end # 直接调用即可 bar(args)
这种方式相当于在包的内部添加了新函数,能100%复用原函数的所有依赖。
3. 创建本地补丁包(长期维护推荐)
如果需要长期使用修改后的函数,推荐克隆原包源码到本地,修改后作为开发依赖使用:
- 克隆LibraryA的源码到本地目录
- 在源码中修改原
foo函数,或者添加bar函数 - 在你的项目环境中执行
dev ./path/to/LibraryA,将本地版本设为项目依赖
这种方法既能完整复用所有依赖,又能方便维护修改,还能随时同步上游包的更新。
内容的提问来源于stack exchange,提问作者RLLL
相关产品推荐
相关产品推荐

