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

时间:2011-06-23 18:48:04

标签: javascript rebol

假设我有

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()

2 个答案:

答案 0 :(得分:4)

这种情况下的习语是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))

答案 1 :(得分:0)

另一种方法是使用REBOL的颗粒再做一点,链接的风格真的不是REBOL的强项:

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

make WORLD [create]

或者,如果您正在寻找来自create的响应(在此实例中您将无法获得'print返回未设置!):

result: do bind [create] make WORLD []
与链接相比,它可能有点笨拙,但后来链接是旧学校的语言。使用'bind就像访问黑魔法一样。