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