gpt4 book ai didi

oop - rebol 中是否有对象构造函数

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

我通常以“本能”的方式通过函数进行编程,但我目前的问题可以通过对象轻松解决,所以我继续使用这种方法。

这样做,我试图找到一种方法给对象一个构造方法,相当于初始化 () 在 python 中,例如。

我查看了http://www.rebol.com/docs/core-fr/fr-index.html文档,但我找不到任何相关的东西。

最佳答案

Rebol 中没有特殊的构造函数,但是如果您在规范 block 中创建对象时需要它,可以编写临时初始化代码。例如:

a: context [x: 123]

b: make a [
y: x + 1
x: 0
]

因此,如果您按照约定在基础对象中定义自己的“构造函数”函数,则可以在创建时将其称为规范 block 。如果你想让它自动化,你可以将它包装在一个函数中,如下所示:
a: context [
x: 123
init: func [n [integer!]][x: n]
]

new-a: func [n [integer!]][make a [init n]]

b: new-a 456

一个更健壮(但更长一点)的 new-a 版本可以避免传递给 init 的参数可能与对象自己的话发生冲突:
new-a: func [n [integer!] /local obj][
also
obj: make a []
obj/init n
]

您还可以编写一个更通用的新函数,它将基对象作为第一个参数,并在克隆对象后自动调用按约定构造函数,但是以通用方式支持可选构造函数参数则更加棘手。

请记住 Rebol 的对象模型是基于原型(prototype)的(相对于 Python 和大多数其他 OOP 语言中的基于类),因此“构造函数”函数为每个创建的新对象获取 重复 。如果您要创建大量对象,您可能希望避免这种成本。

关于oop - rebol 中是否有对象构造函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19229293/

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