如何用方法调用链接make对象

How to chain make object with method call?

本文关键字:make 对象 链接 调用 何用 方法      更新时间:2023-09-26

假设我有

WORLD: make object! [
      people: make Object! []
      cars: make Object! []
      factories: make Object! []
      create: func[][print "new world"]
]

如何使用create方法进行链接?这样的东西不起作用。

(make WORLD[])/create

这是我想模仿的JavaScript

(new WORLD()).create()

这种情况下的习惯用法是do get in:

>> do get in make object! [a: does [42]] 'a
== 42

IN返回对象上下文中的单词'aGET检索绑定到'a单词的值(在该上下文中)。最后,正如我们期望GET返回的值是一个函数一样,我们只是使用DO调用该函数。

对于您给出的示例,这将因此看起来如下:

do get in make WORLD [] 'create

根据Hostile Fork在评论中的建议,这里是最后一个表达式的全括号版本,以明确函数arity:

do (get (in (make WORLD []) 'create))

另一种方法是对REBOL的粒度进行更多的处理,这种类型的链接实际上并不适合REBOL:

WORLD: make object! [
      people: make Object! []
      cars: make Object! []
      factories: make Object! []
      create: does [print "new world"]
]
make WORLD [create]

或者,如果你正在寻找来自create的响应(在这种情况下,你不会得到'打印返回未设置!'):

result: do bind [create] make WORLD []

与链接相比,它可能有点笨拙,但链接是老派的语言。使用"绑定"就像可以使用黑魔法。