Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/39.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
REBOL对象上的类型声明_Rebol - Fatal编程技术网

REBOL对象上的类型声明

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

我知道你可以在函数上输入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
    ** 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的简单原理优先于特性蠕变

所有这些都说明,如果你有一个简单的方法做它的想法,让它知道