4

我知道您可以键入声明参数并返回函数

    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

那么对象属性呢?

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"

我已经将属性的类型声明作为示例,但它只是用于文档吗?

4

2 回答 2

6

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

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

所以,问题就变成了:我们希望在语言语法中支持多少种不同的特性,具体来说,我们将如何做到这一点?这些功能的“可选”特性使情况变得更加复杂。因此,您不能真正使用位置语义来描述对象。这意味着添加一个句法方法,这意味着添加关键字(因为 Rebol 确实试图避免使用标点符号。)

因此,结果,源表单会变得相当冗长,我认为我们可以质疑是否值得我们从首先允许该功能中获得的好处。

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

说了这么多,如果你有一个简单的方法的想法,那就让大家知道吧!

于 2013-05-28T01:12:39.367 回答
1

它仅用于文档.. 类型检查仅对函数进行。

于 2013-04-02T01:45:59.823 回答