【发布时间】:2021-06-08 05:36:24
【问题描述】:
##define the struct
struct DataLoader
getter::String
DataLoader(getter="remote") = new(getter)
end
##testing the struct
ld = DataLoader("local")
ld.getter
##local
ld = DataLoader()
ld.getter
##remote
我正在尝试在 Julia 中编写一个数据加载器,并在上面定义一些其他方法。
用户可以通过两种方式加载数据 - “remote”和“local”。
如果用户选择local,我需要另一个字段base_dir - 存储数据的目录。如果用户选择remote,我不需要base_dir,因为我知道向哪个 URL 发出请求。
之后,当加载器被定义后,我会调用加载器上的一些函数来做其他事情(下面的示例函数):
function bar(x::DataLoader)
if x.getter == "local"
#do_somethings
println("local found")
elseif x.getter == "remote"
println("remote found")
else
println("wrong mode passed")
end
end
我的问题是如何在结构中定义这种相互依赖关系?也就是说,我如何告诉用户并在我的代码中实现如果getter 是local 我需要base_dir,如果它是远程的,我可以从我的结构中动态删除字段base_dir。
我是 Julia 的新手,所以任何其他关于改进代码的提示也非常受欢迎。
【问题讨论】:
-
你应该有一个抽象类型
DataLoader和两个具体结构DataLoaderLocal和DataLoaderRemote。这正是应该使用类型系统而不是一些“特殊”字段的情况。您还可以始终拥有一个工厂,例如get_data_loader,它返回任一版本的DataLoader
标签: julia