gpt4 book ai didi

julia - 如何在模块内部使用模块外部的函数

转载 作者:行者123 更新时间:2023-12-04 17:16:15 25 4
gpt4 key购买 nike

基本上我想要一个可以使用超出其范围的功能的模块。
我需要这个,因为我的工作只会提供一个框架,用户可以在其中放入自己的代码。像这样的东西

模拟.jl

abstract AbstractType

function startSimulation(unknown::AbstractType)
doStuff(unknown)
end

我的模块.jl
module MyModule
include("Simulation.jl")
export AbstractType, startSimulation
end

SomeImplementation.jl
type ConcreteType <: AbstractType
variable::Int64
end

doStuff(me::ConcreteType)
me.variable
end

最后是 Main.jl
# push!(LOAD_PATH, pwd()) # for local usage
using MyModule
include("SomeImplementation.jl")
startSimulation(ConcreteType(5))

其中 Simulation.jl 和 MyModule.jl 由我编写, SomeImplementation.jl 和 Main.jl 由用户编写。

现在上面的例子不起作用,因为模块有自己的命名空间,即使 SomeImplementation.jl 在第 3 行导入到 main 中,解释器也不会在 Simulation.jl 的第 4 行看到它。

我无法在 MyModule.jl 中导入任何内容,因为我不知道用户将如何命名他的东西或他甚至可能需要哪些额外的库。

有没有办法用模块做到这一点?否则我不会使用模块。

最佳答案

这里的答案是为您想要在 MyModule 中调用的所有函数创建 stub 。作为 AbstractType 的自定义子类型的必需接口(interface).也就是说,在 MyModule 内,你会有:

abstract AbstractType

doStuff(::AbstractType) = error("custom AbstractType objects must define a `doStuff` method)

function startSimulation(unknown::AbstractType)
doStuff(unknown)
end

那么具体的实现只需要专门加上他们的 doStuff通过导入或限定 MyModule 中的函数的方法:
MyModule.doStuff(me::ConcreteType)
me.variable
end

关于julia - 如何在模块内部使用模块外部的函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43503387/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com