REBOL对象上的类型声明
我知道你可以在函数上输入declare参数和返回值REBOL对象上的类型声明,rebol,Rebol,我知道你可以在函数上输入declare参数和返回值 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
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"
我已经将属性上的类型声明作为示例,但它只是用于文档吗?它只是用于文档。。类型检查只在函数上进行。这是一个非常好的问题,也是我多年来一直思考的问题。事实证明,Rebol的内部对象存储机制可以处理这个问题,但无法在源代码中表达它。你为什么不问?原因如下: Rebol目前有名称-值对的概念。这就是上下文和对象的表达方式。但是,对象通常需要包含其他信息,而不仅仅是名称或值。数据类型就是一个很好的例子。其他示例包括附加到值的注释,以及对值的保护/权限(例如允许读写) 因此,问题变成了:我们希望在语言语法中支持多少不同的功能,具体来说,我们将如何做到这一点?由于这些特性的“可选”特性,它变得更加复杂。因此,您不能真正使用位置语义来描述对象。这意味着添加一个语法方法,这意味着添加关键字(因为Rebol确实试图避免标点符号) 因此,其结果是,源表单将变得相当冗长,我认为我们可能会质疑,首先允许该特性是否值得 因此,在这种情况下,Rebol的简单原理优先于特性蠕变 所有这些都说明,如果你有一个简单的方法做它的想法,让它知道