2015-07-21 7 views
3

Пожалуйста, рассмотрите этот пример, когда я сохраняю файл map! в файле и хочу его загрузить и получить доступ к его ключам и значениям. Его ключи хеш (INTEGER !, рассчитываемого checksum) и его значение блоки:загрузить карту хеша - пара ключей объекта

Rebol [] 

bl1: make object! [ 
     name: "first" 
     age: 42 
] 

bl2: make bl1 [] 

bl2/name: "second" 
bl2/age: 30 

hash1: checksum to-binary to-string bl1 
hash2: checksum to-binary to-string bl2 

m1: make map! [] 
repend m1 [hash1 bl1] 
repend m1 [hash2 bl2] 

save %./map_example.ls m1 

m2: do load %./map_example.ls 
probe join "m2: " type? m2 

Он возвращает "m2: map!"

Файл % map_example.ls состоит из:

make map! [ 
    2749161 make object! [ 
     name: "first" 
     age: 42 
    ] 
    4111405 make object! [ 
     name: "second" 
     age: 30 
    ] 
] 

Как я могу прочитать map! назад для доступа к его ключам и значениям, являющимся объектами?

Есть foreach путь?

ответ

4

SAVE использует несовершенный, но более читаемый формат. Используйте SAVE/ALL, чтобы сохранить все значения точно так, как они должны быть (SAVE/ALL использует формат сериализации вызовов в форме #[datatype! value]).

Кроме того, просто используйте LOAD, а не DO LOAD, чтобы получить данные. DO не требуется в этом случае - LOAD преобразует строку в значения Rebol, и поскольку это просто данные, а не сценарий, нет необходимости в DO (вы можете, но он просто возвращает себя).