次のように、f へのポインターとして p を作成できます。
f: func[][print 1]
p: :f
実行時:
>> p
1
しかし、 f を次のように変更すると
f: func[][print 1 print 2]
p は 2 を出力しません。
p ポイントを「動的に」 f に取得する別の方法はありますか?
Note you've created a new instance of f there - not modified it. You can modify f though by altering the contents of its second block. ie...
>> f: func[][print 1] >> p: :f >> p 1 >> append second :f [print 2] == [print 1 print 2] >> p 1 2
Hope that helps.
エイリアスを使用できます。
既存の単語をエイリアスとして使用できないため、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: のようなアクセサを使用することです [P]
p が値を変更すると、P のバインディングは変更されておらず、その値 (新しい関数) のみが変更されているため、f は新しい関数を呼び出すことを認識します。
エイリアスはポインターではなく単語の等価性であるため、パス上の単語としても有効であり、実際の使用では非常に厄介です。