我可以创建p作为指向f的指针:
f: func[][print 1]
p: :f
执行时:
>> p
1
但如果我将f修改为
f: func[][print 1 print 2]
p不会打印2。
还有另一种方法可以“动态地”将p点变为f吗?
答案 0 :(得分:3)
注意你在那里创建了一个新的f实例 - 没有修改它。您可以通过更改其第二个块的内容来修改f。即...
>> f: func[][print 1] >> p: :f >> p 1 >> append second :f [print 2] == [print 1 print 2] >> p 1 2
希望有所帮助。
答案 1 :(得分: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
]
答案 2 :(得分:0)
当你做F :: P你实际上做F“指向'P的值(该功能)。
再次执行P:func [] []时,您正在创建一个新的函数值,只为其赋值。
间接的唯一方法是通过访问器,类似F:做[P]
当p改变值时f将知道调用新函数,因为P的绑定没有改变,只有它的值(这是一个新函数)。
别名是单词等价,而不是指针,所以它们在路径上也是有效的,在实际使用中非常讨厌。