1

我可以像这样创建 p 作为指向 f 的指针:

f: func[][print 1]
p: :f

执行时:

>> p
1

但是如果我将 f 修改为

f: func[][print 1 print 2]

p 不会打印 2。

有没有另一种方法可以“动态地”获得 p 点到 f ?

4

3 回答 3

4

请注意,您在那里创建了一个新的 f 实例 - 没有修改它。您可以通过更改 f 的第二个块的内容来修改它。IE...

>> f: func[][打印 1]
>> p: :f
>> p
1
>> 附加第二个:f [打印 2]
== [打印 1 打印 2]
>> p
1
2

希望有帮助。

于 2010-11-28T10:49:42.130 回答
1

您可以使用别名

REBOL 中的别名有点受限,因为您不能使用任何预先存在的词作为别名。但这对我有用:

f: does [print 1]    ;; define 'f as you do
alias 'f "px"        ;; create an alias as 'px
px 
== 1                 ;; same result as 'f

f: context [a: 3]    ;; change 'f to something completely different
probe px             ;; 'px is the same as the new 'f
    make object! [
        a: 3
    ]
于 2010-11-28T15:30:19.423 回答
0

当您执行 F: :P 时,您实际上是在执行 F“指向”P 的(函数)。

当您再次执行 P: func [][] 时,您正在创建一个新的函数,只有 P 被赋值。

获得间接的唯一方法是通过访问器,例如 F: do [P]

当 p 改变时f 会知道调用新函数,因为 P 的绑定没有改变,只有它的值(这是一个新函数)。

别名是单词等效项,而不是指针,因此它们也可以作为路径上的单词有效,并且在实际使用中非常讨厌。

于 2010-12-09T16:09:06.697 回答