Я разрабатываю пакет Provider в Julia, который будет использоваться несколькими пакетами Consumer. Ниже приведен минимальный пример структуры проекта для пакета Provider
и пример пакета для потребителя под названием Consumer_A
для воспроизведения проблемы:
Файл generic.jl в пакете Provider определяет абстрактный тип AbstractDataLoader
с функцией load_data
. Эта функция переопределена в конкретном типе CustomDataLoader
, определенном в файле custom_implementation.jl в пакете Consumer_A, как показано ниже:
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()
я получаю сообщение об ошибке «Не определена функция load_data для CustomDataLoader», которое возникает в функции generic.jl load_data
. Как убедиться, что в этом случае вызывается переопределяющая функция конкретного типа?