Julia:重写抽象类型的函数未被调用
我正在Julia中开发一个提供者包,它将被多个消费者包使用。以下是Julia:重写抽象类型的函数未被调用,julia,Julia,我正在Julia中开发一个提供者包,它将被多个消费者包使用。以下是提供商包和名为消费者_a的消费者包样本的项目结构的最低示例,以再现问题: Provider包中的generic.jl文件定义了一个抽象类型AbstractDataLoader,其中包含一个函数load\u data。此函数在Consumer_A包中文件custom_implementation.jl中定义的具体类型CustomDataLoader中被重写,如下所示: generic.jl: export DataProcesso
提供商
包和名为消费者_a
的消费者包样本的项目结构的最低示例,以再现问题:
Provider包中的generic.jl文件定义了一个抽象类型AbstractDataLoader
,其中包含一个函数load\u 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
自定义_implementation.jl:
import Provider
export CustomDataLoader, load_data
struct CustomDataLoader <: Provider.AbstractDataLoader end
function load_data(data_loader::CustomDataLoader)
return "sample data"
end
但是,在运行
main()
时,我得到了generic.jlload\u data
函数中引发的错误“No load\u data function defined for CustomDataLoader”。如何确保在这种情况下调用重写的具体类型函数?在custom_implementation.jl中,我尝试用函数提供程序替换函数加载\u数据
。加载\u数据
,因为我使用的是语句导入提供程序
,而不是使用提供程序
,因为我想覆盖定义。通过此更改,它可以正常工作,并且可以调用重写函数
更新的custom_implementation.jl现在是:
import Provider
export CustomDataLoader, load_data
struct CustomDataLoader <: Provider.AbstractDataLoader end
function Provider.load_data(data_loader::CustomDataLoader)
return "sample data"
end
导入提供程序
导出CustomDataLoader,加载\u数据
结构CustomDataLoader
import Provider
export CustomDataLoader, load_data
struct CustomDataLoader <: Provider.AbstractDataLoader end
function Provider.load_data(data_loader::CustomDataLoader)
return "sample data"
end