在REBOL对象上键入声明

Roy*_*tty 4 rebol

我知道你可以输入声明参数并返回函数

    some-func: function [
   "some func"
    number [ integer! ] 
    ] [
    result [ integer! ]
    ] [
    help number
    return number
    ]

    some-func 1
    some-func "blah"

    NUMBER is an integer of value: 1
    ** Script error: some-func does not allow string! for its number argument
Run Code Online (Sandbox Code Playgroud)

虽然对象属性怎么样?

o: make object! [
    a [string!]
    b [integer!]
    c [o2]
    none
]

o2: make object! [
    c [string!]
]

an-object: make o [
    a: 3.141 
    b: "an integer"
    c: "blah"
]

help an-object

N-OBJECT is an object of value:
a               decimal!  3.141
b               string!   "an integer"
c               string!   "blah"
Run Code Online (Sandbox Code Playgroud)

我已经在属性上看到了类型声明作为示例,但它仅用于文档吗?

reb*_*bol 6

这是一个非常好的问题,也是我多年来一直在思考的问题.事实证明,Rebol的内部对象存储机制可以处理这个问题,但是没有办法在源代码中表达它.你为什么不问?原因如下:

Rebol目前具有名称 - 值对的概念.这就是上下文和对象的表达方式.但是,对象通常需要包含不仅仅是名称或值的其他信息.数据类型是一个很好的例子.其他示例是附加到值的注释,以及对值的保护/权限(例如允许读取和写入).

因此,问题变成了:我们希望在语言语法中支持多少种功能,具体来说我们将如何做?这些特征的"可选"特征使其变得更加复杂.因此,您无法真正使用位置语义来描述对象.这意味着添加一个语法方法,这意味着添加关键字(因为Rebol真的试图避免标点符号.)

因此,源代码形式将变得相当冗长,我认为我们可以质疑,首先允许该功能是否值得我们获得的好处.

因此,这是Rebol的简单原则优先于特征蠕变的情况.

所有这一切,如果你有一个简单的方法的想法,让它知道!