gpt4 book ai didi

constructor - 为什么Rebol中的 'context'和 'object'函数不同,但本质上是相同的?

转载 作者:行者123 更新时间:2023-12-03 03:33:04 25 4
gpt4 key购买 nike

一方面我们有:

>> 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 的 block 构造的。这不会改变长度,或者据我所知,不会添加任何内容。另一方面,对于context,对象是按原样使用传入的 block 构造的。

为什么会有差异,以及为什么 context 不能只是 object 的别名。

最佳答案

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

将其称为 object 是有道理的,因为这是类型名称,而且对于具有上下文相关语义的语言中的对象来说,“context”实际上是一个不好的名称(为了更详细地描述) “上下文”一词的适当含义)。这确实会导致一些令人困惑的对话。由于 R3 现在有了模块,所以以前使用的 context 函数的大部分内容都可以通过模块更好地覆盖。保留上下文主要是为了向后兼容。

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

事实证明,有一点是成功的,那就是使用不带感叹号的类型名称作为类型构造函数的名称。我们也将 map 更改为这样,并且我们最终可能会为其他类型添加类似的构造函数,尽管大多数需要它们的构造函数已经有了。

关于constructor - 为什么Rebol中的 'context'和 'object'函数不同,但本质上是相同的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15144683/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com