Julia:重写抽象类型的函数未被调用

Julia:重写抽象类型的函数未被调用,julia,Julia,我正在Julia中开发一个提供者包,它将被多个消费者包使用。以下是提供商包和名为消费者_a的消费者包样本的项目结构的最低示例,以再现问题: Provider包中的generic.jl文件定义了一个抽象类型AbstractDataLoader,其中包含一个函数load\u data。此函数在Consumer_A包中文件custom_implementation.jl中定义的具体类型CustomDataLoader中被重写,如下所示: generic.jl: export DataProcesso

我正在Julia中开发一个提供者包,它将被多个消费者包使用。以下是
提供商
包和名为
消费者_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.jl
load\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