【发布时间】:2019-04-01 03:30:39
【问题描述】:
我正在 Julia 中开发一个 Provider 包,它将被多个 Consumer 包使用。下面是Provider 包的项目结构的最小示例和一个名为Consumer_A 的示例消费者包以重现该问题:
Provider 包中的 generic.jl 文件定义了一个抽象类型 AbstractDataLoader 和一个函数 load_data。该函数在 Consumer_A 包的 custom_implementation.jl 文件中定义的具体类型 CustomDataLoader 中被覆盖,如下所示:
generic.jl:
export DataProcessor, process_data
abstract type AbstractDataLoader end
function load_data(data_loader::AbstractDataLoader)
error("No load_data function defined for $(typeof(data_loader))")
end
struct DataProcessor end
function process_data(data_loader::AbstractDataLoader)
data = load_data(data_loader)
println("do some processing after loading data: $data")
end
custom_implementation.jl:
import Provider
export CustomDataLoader, load_data
struct CustomDataLoader <: Provider.AbstractDataLoader end
function load_data(data_loader::CustomDataLoader)
return "sample data"
end
main.jl 文件有一个 main 函数,它实例化具体类型并调用方法 process_data,而该方法又应该理想地调用覆盖函数:
using Provider
export main
function main()
data_loader = CustomDataLoader()
data_processor = DataProcessor()
process_data(data_loader)
end
但是,在运行 main() 时,我收到了 generic.jl load_data 函数中引发的错误“没有为 CustomDataLoader 定义的 load_data 函数”。在这种情况下,如何确保调用覆盖的具体类型函数?
【问题讨论】:
标签: julia