假设我有
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()
答案 0 :(得分:4)
这种情况下的习语是do get in
:
>> do get in make object! [a: does [42]] 'a
== 42
IN
在对象的上下文中返回单词'a
。 GET
检索绑定到'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就像访问黑魔法一样。