4

一方面,我们有:

>> source object
object: make function! [[
    "Defines a unique object."
    blk [block!] "Object words and values."
][
    make object! append blk none
]]

对于上下文,我们看到:

>> source context
context: make function! [[
    "Defines a unique object."
    blk [block!] "Object words and values."
][
    make object! blk
]]

因此,因为对象是从已附加object到的块中构造的。none这不会改变长度,或者,据我所知,添加任何东西。context另一方面,使用传入的块构造对象,原样。

为什么差异以及为什么,例如,不能context只是object.

4

1 回答 1

3

向后兼容。我们context在 Rebol 中已经有一个以特定方式工作的函数(不是初始化变量),但我们需要一个将变量初始化为 none 的函数,作为将对象创建为数据结构而不是代码容器时的便利函数。

调用它是有道理的,object因为这是类型名称,并且因为“上下文”实际上对于具有上下文敏感语义的语言中的对象来说是一种不好的名称(对于“上下文”这个词的更合适的含义)。这确实会导致一些令人困惑的对话。由于 R3 现在有了模块,因此以前对该context功能的大部分使用都被模块更好地覆盖了。完全保留context主要是为了向后兼容。

当前object函数几乎是我们尚未想到的更好的类型构造包装器的占位符。我们需要类似的东西,但它的行为可能需要一些细微的变化,我们会在更多使用时发现这些变化。一方面,它修改了其规范块这一事实使其对于递归或并发来说不是很安全。如果这样可以改进它,它可能最终会成为本地人,或者construct如果事实证明这是一种更好的方法,它可能会成为一种选择。

确实成功的一件事是使用不带感叹号的类型名称作为类型构造函数的名称的做法。我们也改成map这样,我们最终可能会为其他类型添加类似的构造函数,尽管大多数需要它们的人已经有了它们。

于 2013-02-28T21:06:48.143 回答