首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在Rebol2中,您从对象/函数的第三位获得的无文档块是什么?

在Rebol2中,您从对象/函数的第三位获得的无文档块是什么?
EN

Stack Overflow用户
提问于 2014-02-26 21:32:34
回答 2查看 63关注 0票数 5

我在内部阅读过R2将上下文存储为两个表,一个用于单词,另一个用于值,因此您可以请求它们:

代码语言:javascript
复制
o: context [a: 1 b: 2]
>> first o
== [self a b]
>> second o
== [make object! [
        a: 1
        b: 2
    ] 1 2]

无论如何..。

代码语言:javascript
复制
>> pick o 1
== [self a b]
>> pick o 2
== [make object! [
        a: 1
        b: 2
    ] 1 2]

但是有第三个“表”(一个块),它似乎没有文档,而且这个表只能使用第三个函数访问。

代码语言:javascript
复制
>> third o
== [a: 1 b: 2]

>> pick o 3
** Script Error: Out of range or past end
** Near: pick o 3

第三个街区应该是什么?

类似的事情似乎发生在函数中,但这次第三次和第三次都表现得很好:

代码语言:javascript
复制
>> f: func [a] [print a]
>> first :f
== [a]
>> second :f
== [print a]
>> third :f
== [a]
>> pick :f 1
== [a]
>> pick :f 2
== [print a]
>> pick :f 3
== [a]

第一个块是params,第二个块是body,但是这个第三个块在函数中代表什么?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-02-26 21:47:33

你注意到了:

代码语言:javascript
复制
>> third o
== [a: 1 b: 2]

>> pick o 3
** Script Error: Out of range or past end
** Near: pick o 3

...which很奇怪。在Rebol2中,对于某些边缘情况,第三项似乎并不完全等同于选择3。*-/

在Rebol3中,情况已不再如此。但是,在Rebol3中,位置选择不再适用于对象或函数:

代码语言:javascript
复制
>> pick object [a: 1 b: 2] 1
** Script error: pick does not allow object! for its aggregate argument

相反,你有词-OF,VALUES OF和BODY-OF:

代码语言:javascript
复制
>> words-of object [a: 1 b: 2]
== [a b]

>> values-of object [a: 1 b: 2]
== [1 2]

>> body-of object [a: 1 b: 2]
== [
    a: 1
    b: 2
]

它们已经在一个名为"R2/Forward“的内置库中移植到Rebol2,因此您可以(并且应该)使用这些函数来代替位置选择。

你注意到从第一和第三处得到了类似的答案:

代码语言:javascript
复制
>> f: func [a] [print a]

>> first :f
== [a]

>> second :f
== [print a]

>> third :f
== [a]

>> pick :f 1
== [a]

>> pick :f 2
== [print a]

>> pick :f 3
== [a]

第一个块是params,第二个块是body,但是这个第三个块在函数中代表什么?

您的示例太简单了,无法注意到第三个规范的区别在于它是规范,因为您的规范只包含单词。所以,规范--等同于词语--OF。将一个类型约束添加到您的规范中会显示不同之处。

代码语言:javascript
复制
>> f: func [a [integer!]] [print a]

>> first :f
== [a]

>> third :f
== [a [integer!]]

再次,Rebol2通过R2/前进为您提供词-OF,SPEC-OF和BODY-OF的函数。再次,避免对这些属性使用位置选择。

票数 2
EN

Stack Overflow用户

发布于 2014-02-26 21:45:15

Third返回对象定义。

代码语言:javascript
复制
>> body: [a: 1 b: 2]
== [a: 1 b: 2]
>> obj: context body
>> equal? body third obj
== true
>> strict-equal? body third obj
== true

它与Rebol 2.7.7及更高版本和Rebol 3中的body-of相同。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22053821

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档