在运行时将变量保存到文件

时间:2016-05-03 15:55:07

标签: metaprogramming julia

我在Julia中寻找一些与Matlab相似的功能

save('myfile.mat', 'myvar1', 'myvar2')

例如,使用HDF5.jl,很容易做到

@write filename myvar1 myvar2

但是这需要我确切地知道我要写入文件的变量。

我希望能够在函数范围内选择在运行时编写的变量,并使用符号或字符串指定其名称。

vars = [:myvar1, :myvar2]
@write filename vars

实现这一目标的最佳方法是什么?

修改

我知道我可以使用JLD.jl中的save作为save("file.jld", "myvar1", myvar1)。但我希望能够保存编译时未知的变量列表,允许单次调用save(或类似):

if condition
    myvar1 = 1
    vars = [:myvar1]
else
    myvar1 = 1
    myvar2 = 2
    vars = [:myvar1, :myvar2]
end

# what goes here?
save(filename, vars...)

2 个答案:

答案 0 :(得分:2)

您可能需要查看JLD package,它建立在HDF5之上,更好地支持用户定义的Julia类型。 HDF5和JLD都为save提供了获取变量运行时名称的函数。

答案 1 :(得分:2)

您可以使用serializedeserialize

vars = Dict()
if condition
   myvar = 1
   vars[:myvar1] = myvar1
else
   myvar1 = 1
   myvar2 = 2
   vars[:myvar1] = myvar1
   vars[:myvar2] = myvar2
end

f = open( filename, "w" )
serialize( f, vars )
close( f )

阅读:

f = open( filename, "r" )
vars = deserialize( f )
close( f )

如果您不需要保存变量名,则可以使用数组而不是dict:vars = []