我可以像这样创建 p 作为指向 f 的指针:
f: func[][print 1]
p: :f
执行时:
>> p
1
但是如果我将 f 修改为
f: func[][print 1 print 2]
p 不会打印 2。
有没有另一种方法可以“动态地”获得 p 点到 f ?
请注意,您在那里创建了一个新的 f 实例 - 没有修改它。您可以通过更改 f 的第二个块的内容来修改它。IE...
>> f: func[][打印 1] >> p: :f >> p 1 >> 附加第二个:f [打印 2] == [打印 1 打印 2] >> p 1 2
希望有帮助。
您可以使用别名。
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
]
当您执行 F: :P 时,您实际上是在执行 F“指向”P 的值(函数)。
当您再次执行 P: func [][] 时,您正在创建一个新的函数值,只有 P 被赋值。
获得间接的唯一方法是通过访问器,例如 F: do [P]
当 p 改变值时f 会知道调用新函数,因为 P 的绑定没有改变,只有它的值(这是一个新函数)。
别名是单词等效项,而不是指针,因此它们也可以作为路径上的单词有效,并且在实际使用中非常讨厌。