3

如果你建立一个块结构,用 MOLD 将其转换为字符串,然后将其写入如下文件:

>> write %datafile.dat mold [
    [{Release} 12-Dec-2012]
    [{Conference} [12-Jul-2013 .. 14-Jul-2013]]
]

您可以稍后将其加载回来。但是标题呢?如果一个文件包含代码,它应该以如下标题开头:

rebol [
    title: "Local Area Defringer"
    date: 1-Jun-1957
    file: %defringe.r
    purpose: {
        Stabilize the wide area ignition transcriber
        using a double ganged defringing algorithm.
    }
]

如果您只是写出数据并将其读回,您是否希望有一个rebol []标题,并使用您想要添加的任何属性对其进行扩展?您是否应该myformat []使用自己的属性提出自己的标题概念?

此外,鉴于 LOAD 确实绑定,将它用于数据是否有意义或是否有不同的操作?

4

2 回答 2

4

Rebol 数据不必标题,但最好包含一个标题(即使它只是数据)。

一些注意事项:

  • SAVEfile!是序列化到or的最佳选择,port!并且具有包含标头的机制。

  • MOLD并且SAVE两者都有/ALL对应的细化LOAD(没有/ALL,一些数据来自MOLD并且SAVE不能可靠地恢复,包括 Object、Logic 和 None 值)。

  • LOAD丢弃标题,尽管您可以使用/HEADER细化加载它。

把它放在一起:

save/all/header %datafile.dat reduce [next "some" 'data][
    title: "Some Data"
]

header: take data: load/header %datafile.dat

要使用 以外的标头Rebol [],您需要设计一个单独的加载器/保存器。

于 2013-10-08T22:17:48.747 回答
2

对于阅读的情况,construct可以很好load地防止评估(代码而不是数据):

prefs: construct/with load %options.reb default-prefs

这是:

如同context

obj: [
    name: "Fred" 
    age: 27 
    city: "Ukiah"
]

obj-context: context obj
obj-construct: construct obj

在这种情况下,相同:

>> obj-context = obj-construct
== true

不同的

在评估代码时:

obj-eval: [
    name: uppercase "Fred" 
    age: 20 + 7 
    time: now/time
]

obj-eval-context: context obj-eval
obj-eval-construct: construct obj-eval

这次解析不同:

>> obj-eval-context = obj-eval-construct
false

>> ?? obj-eval-construct
obj-eval-construct: make object! [
    name: 'uppercase
    age: 20
    time: now/time
]

在旁边:

这就是我意识到以下代码的行为不像我预期的那样:

obj-eval: [
    title: uppercase "Fred" 
    age: 20 + 7
    city: "Ukiah"
    time: now/time
]

给出红色(以及扩展,rebol2):

>> obj-eval-construct: construct obj-eval
== make object! [
    title: 'uppercase
    age: 20
    city: "Ukiah"
    time: now/time
]

lit-word!并且lit-path!是不同的。待办事项:问题


它也有

有用的细化/with

可用于默认值,类似于make

于 2017-03-31T07:45:17.110 回答