【发布时间】:2016-11-10 12:02:19
【问题描述】:
我可以在 Julia 中创建和使用静态字段吗?让我用一个简化的例子来解释我的问题。假设我们有一个类型:
type Foo
bar::Dict()
baz::Int
qux::Float64
function Foo(fname,baz_value,qux_value)
dict = JLD.load(fname)["dict"] # It is a simple dictionary loading from a special file
new(dict,baz_value,quz_value)
end
end
现在,如您所见,我从 jld 文件加载字典并将其与其他两个变量 baz 和 qux_value 一起存储到 Foo 类型中。现在,假设我将创建 3 个 Foo 对象类型。
vars = [ Foo("mydictfile.jld",38,37.0) for i=1:3]
在这里,如您所见,所有Foo 对象都加载同一个字典。这是一个相当大的文件(~10GB),我不想多次加载它。所以,
我只是问,朱莉娅有什么办法,我只加载一次,所有 3 种类型都可以到达吗? (这就是我在问题中简单地使用静态关键字的方式)
对于这样一个简单的问题,我的方法可能看起来很愚蠢,但下一步,我将这个 Foo 类型设置为可迭代的,并且我需要在 next(d::Foo, state) 函数中使用这个字典。
编辑
其实,我现在已经找到了办法。但我想问一下,这是否正确。
而不是将文件名提供给FOO 构造函数,如果我在创建对象之前将字典加载到变量中并将相同的变量提供给所有构造函数,我猜所有构造函数只是创建一个指向相同的字典,而不是一次又一次地创建。我对吗 ?
所以,修改后的版本会是这样的:
dict = JLD.load("mydictfile.jld")["dict"]
vars = [ Foo(dict,38,37.0) for i=1:3]
顺便说一下,我还是想听听我是否完全在 Foo 类型内部做同样的事情(我的意思是它的构造函数)
【问题讨论】: