2015-07-21 76 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它(可以,但它只是返回本身)。