1

次のように、f へのポインターとして p を作成できます。

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

実行時:

>> p
1

しかし、 f を次のように変更すると

f: func[][print 1 print 2]

p は 2 を出力しません。

p ポイントを「動的に」 f に取得する別の方法はありますか?

4

3 に答える 3

4

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.

于 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: のようなアクセサを使用することです [P]

p が値を変更すると、P のバインディングは変更されておらず、その値 (新しい関数) のみが変更されているため、f は新しい関数を呼び出すことを認識します。

エイリアスはポインターではなく単語の等価性であるため、パス上の単語としても有効であり、実際の使用では非常に厄介です。

于 2010-12-09T16:09:06.697 に答える