有没有方法可以强制一个字典保持不变?
我有一个函数,它从文件中读取参数(并忽略注释),然后将其存储在一个字典中:
function getparameters(filename::AbstractString)
f = open(filename,"r")
dict = Dict{AbstractString, AbstractString}()
for ln in eachline(f)
m = match(r"^\s*(?P<key>\w+)\s+(?P<value>[\w+-.]+)", ln)
if m != nothing
dict[m[:key]] = m[:value]
end
end
close(f)
return dict
end
这很好用。由于我有很多参数,将在不同的地方使用,所以我的想法是让这个字典成为全局的。众所周知,全局变量并不是那么好,所以我想确保字典及其成员是不可变的。
这是一个好方法吗?我该怎么做?我必须这样做吗?
额外可回答的问题:
我的代码是否正确?(这是我用Julia编写的第一件事情,来自C/C++和Python,我有不同的做事方式。)我需要检查文件是否已经打开吗?我的读取文件的方式符合Julia的风格吗?我也可以使用
readall
然后使用eachmatch
。我没有看到“正确的做法”(就像在Python中)。
open(filename) do f ... end
语法(参见 http://docs.julialang.org/en/release-0.4/manual/functions/#do-block-syntax-for-function-arguments)比显式地close
文件更好。首先,使用 do 块即使发生异常也会清理文件。 - Fengyang Wang