Я впервые пишу на Julia, и меня смущает, как работает область видимости переменных, хотя я читал ее в документации.
Я пишу этот простой скрипт для чтения содержимого файла JSON и проанализируйте его в Dict:
import JSON
using ArgParse
s = ArgParseSettings()
@add_arg_table! s begin
"filename"
help = "a positional argument"
arg_type = String
required = true
end
function main(args)
jsontxt = ""
open(args["filename"], "r") do f
global jsontxt = read(f, String) # file information to string
println(jsontxt)
end
model_params = JSON.parse(jsontxt) # parse and transform data
println(model_params)
end
parsed_args = parse_args(ARGS, s)
main(parsed_args)
Итак, я ожидаю, что переменная jsontxt
будет содержать результат read(f, String)
, когда я передам его в JSON.parse
. Однако кажется, что когда я вызываю JSON.parse
, jsontxt
пуст, как в области действия функции main
. Мое ожидание от чтения аналогичного (или мне так казалось) примера чтения файлов заключалось в том, что я бы изменил содержимое jsontxt
, если бы определил его как переменную global
, чего, похоже, не происходит.
Что есть Я неправильно понял и как исправить?
Пример JSON для запуска скрипта:
{
"glossary": {
"title": "example glossary",
"GlossDiv": {
"title": "S",
"GlossList": {
"GlossEntry": {
"ID": "SGML",
"SortAs": "SGML",
"GlossTerm": "Standard Generalized Markup Language",
"Acronym": "SGML",
"Abbrev": "ISO 8879:1986",
"GlossDef": {
"para": "A meta-markup language, used to create markup languages such as DocBook.",
"GlossSeeAlso": ["GML", "XML"]
},
"GlossSee": "markup"
}
}
}
}
}