利用代码块中隐含的对象字段

时间:2015-09-16 20:22:00

标签: rebol rebol3

让我说我有:

 foo: object [bar: 10]

 print foo/bar ;-- output 10

是否有 xxx 表示:

 foo: object [bar: 10]

 xxx foo [
     print bar ;-- output 10
 ]

绑定会起作用,但很难看(在块之后放置对象引用),你必须调用DO:

 foo: object [bar: 10]

 do bind [
     print bar ;-- output 10
 ] foo

(默认情况下它也会改变块参数......对于受欢迎的xxx来说,这可能不是一个很好的通用属性。)

对于xxx来说,USE似乎是一个好词,但它已经被用于其他东西:它允许你在本地上下文中声明单词,同时保留该单词的先前定义:

 foo: object [bar: 10]

 use [foo] [
     foo: object [bar: 20]
     print foo/bar ;-- prints 20
 ]

 print foo/bar ;-- prints 10

某些东西已经在盒子里做了我想要的东西,还是必须要写它? WITH可能是一个好名字,来自具有并行功能的其他语言。

一种选择是将其作为使用的延伸......或许如果你给它一个GET-WORD它会做什么!在列表中。

1 个答案:

答案 0 :(得分:2)

这是in的主要用例之一,"倒置" bind的表弟:

>> foo: object [bar: 10]
== make object! [
    bar: 10
]

>> do in foo [print bar]
10

如果您不希望代码块发生变异,请在混合中添加copydo in foo copy [print bar]

请务必同时查看(再次)" How to use IN with a block instead of an object?"的答案。