如何在Rebol中定义自己的数据类型?
鉴于您可以将函数的参数限制为特定的数据类型,因此您可能需要定义自己的数据类型,但在Rebol文档中,我看不到任何东西表明这是语言的一个特性(除非我看起来不太好) 我所期望的是能够做到以下几点:如何在Rebol中定义自己的数据类型?,rebol,Rebol,鉴于您可以将函数的参数限制为特定的数据类型,因此您可能需要定义自己的数据类型,但在Rebol文档中,我看不到任何东西表明这是语言的一个特性(除非我看起来不太好) 我所期望的是能够做到以下几点: mytype!: make datatype! ... ; some spec here 这可能吗?以下几点并没有让我充满希望: 从链接: 目的:{ 允许程序员定义自定义REBOL数据类型 } 这是一段相当长的代码。这不是我所希望的。经常建议,到今天为止还没有实施 任何有用的自定义数据类型建议通常都需
mytype!: make datatype! ... ; some spec here
这可能吗?以下几点并没有让我充满希望:
从链接:
目的:{
允许程序员定义自定义REBOL数据类型
}
这是一段相当长的代码。这不是我所希望的。经常建议,到今天为止还没有实施 任何有用的自定义数据类型建议通常都需要将它们挂钩,这样它们就可以有效地“重载”诸如+或附加等内容。有一个内部抽象层叫做动作理论上提供了放置这些挂钩的位置:
>> type? :append
== action!
动作是对第一个参数的一种“方法调用”(即多态),随后的参数被传递给第一个参数。目前,用户没有公开的方法来创建动作或创建响应动作的新数据类型
对于REBOL3,用户定义的数据类型是在名字对象“utype”下提出的——请查看更多信息
然而,在文章的结尾,我注意到了一些细微之处:
为了帮助Red编译器生成更短更快的代码,将引入一个新的#alias编译指令。此指令将允许用户将对象定义转换为可在类型规范块中使用的“虚拟”类型。例如:
#alias book!: object [
title: author: year: none
banner: does [form reduce [author "wrote" title "in" year]]
]
display: func [b [book!]][
print b/banner
]
此添加不仅允许对参数进行更细粒度的类型检查,而且还可以帮助用户更好地记录其代码
在中尝试了utypes的实现 作为一个例子,我实现了 基本上,UType是通过特殊方法以虚线形式实现为对象的:so、.add实现+op等 现在,您可以重载所有操作(但make)和一些本地操作(数学函数、比较、表单、模具、打印、探测)