質問
私はこのようなfへのポインターとしてpを作成できます:
f: func[][print 1]
p: :f
実行するとき:
>> p
1
しかし、Fに変更すると
f: func[][print 1 print 2]
Pは2を印刷しません。
fに「動的に」ポイントを取得する別の方法はありますか?
解決
そこにfの新しいインスタンスを作成したことに注意してください - 変更しませんでした。ただし、2番目のブロックの内容を変更することにより、Fを変更できます。つまり...
>> f: func[][print 1] >> p: :f >> p 1 >> append second :f [print 2] == [print 1 print 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 "pointに" pをしています 価値 (関数)。
p:func [] []を実行すると、新しい機能を作成しています 価値 Pのみが値を割り当てられます。
間接を持つ唯一の方法はアクセサを介して、f:dos [p]のようなものです
pが変化したとき 価値 fは、pの結合が変更されておらず、その値(新しい関数)のみが変更されていないため、新しい関数を呼び出すことを知っています。
エイリアスは単語の等価であり、ポインターではないため、パス上の単語としても有効であり、現実世界での使用では非常に厄介です。
所属していません StackOverflow