Документация Engee

Устаревшие версии

На этой странице перечислены возможности JLD2, которые сохранены для поддержки устаревшего кода. В частности, в следующих разделах описываются макросы @load и @save. Они широко применялись многими пользователями, но из-за них требовалось введение нового синтаксиса на основе макросов. Из-за этого у новых пользователей возникали проблемы, о чем поступало множество сообщений. С момента их появления язык Julia был существенно оптимизирован, и в данном случае макросы уже могут быть излишними.

Макросы @save и @load

Макросы @save и @load — это простейший способ взаимодействия с файлом JLD2. Макрос @save записывает одну или несколько переменных из текущей области в файл JLD2. Например:

using JLD2
hello = "world"
foo = :bar
@save "example.jld2" hello foo

Этот код записывает переменные hello и foo в наборы данных в новом файле JLD2 с именем example.jld2. Макрос @load загружает переменные из файла JLD2:

@load "example.jld2" hello foo

Этот код присваивает содержимое наборов данных hello и foo одноименным переменным в текущей области.

Рекомендуется явным образом задавать имена переменных, которые должны сохраняться в файле и загружаться из него, чтобы было понятно, откуда эти переменные взялись. Однако в целях удобства JLD2 также предоставляет варианты макросов @load и @save, которые не требуют явного присваивания имен переменным. При вызове без аргументов переменных макрос @save <filename> записывает все переменные в глобальной области текущего модуля в файл <filename>, а @load <filename> загружает все переменные из файла <filename>. При вызове без аргументов переменных макрос @load требует указания имени файла в виде строкового литерала, то есть выбрать файл во время выполнения невозможно.

Возможна дополнительная настройка посредством синтаксиса присваивания и передачи параметров:

@save "example.jld2" bye=hello bar=foo
@save "example.jld2" {compress=true} hello bar=foo

# JLD2.@saveMacro

@save filename var1 [var2 ...]
@save filename {compress=true} var1 name2=var2

Записывает одну или несколько переменных var1,... из текущей области в файл JLD2 filename.

Для использования в интерактивном режиме можно сохранить все переменные в глобальной области текущего модуля с помощью @save filename. В более стабильном коде предпочтительнее использовать явную форму во избежание сохранения лишних переменных.

Пример

Сохранение строки hello и массива xs в JLD2-файле example.jld2:

hello = "world"
xs = [1,2,3]
@save "example.jld2" hello xs

Для передачи параметров в команду сохранения используйте {}

@save "example.jld2" {compress=true} hello xs

Для сохранения переменных под другим именем используйте стандартный синтаксис присваивания

@save "example.jld2" greeting=hello xarray = xs

# JLD2.@loadMacro

@load filename var1 [var2 ...]

Загружает одну или несколько переменных var1,... из JLD2-файла filename в текущую область и возвращает вектор имен загруженных переменных.

В интерактивном режиме форма вызова @load "somefile.jld2" загружает все переменные из файла "somefile.jld2" в текущую область. Эта форма поддерживает только литеральные имена файлов, и ее следует избегать в более стабильном коде, чтобы было понятно, откуда взялись переменные.

Пример

Для загрузки переменных hello и foo из файла example.jld2 используйте такой вызов:

@load "example.jld2" hello foo