2010-11-28 18 views

答えて

3

あなたはfの新しいインスタンスを作成しましたが、それを変更していないことに注意してください。 2番目のブロックの内容を変更することで、fを変更することができます。すなわち...

 
>> f: func[][print 1] 
>> p: :f 
>> p 
1 
>> append second :f [print 2] 
== [print 1 print 2] 
>> p 
1 
2 

希望するものがあります。

+0

素晴らしいですね。 –

+0

は、セキュリティ上の懸念からR3ではこれ以上使用できません。 – moliad

+0

R3では、関数の元の本体にアクセスできる場合、関数を変更することは可能です。 – Ladislav

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 
    ] 
+0

私はエイリアスが非常に好きですが、何度も頻繁にエイリアスが発生することがよくあります。 –

+0

希望のエイリアスはReol 3でうまく動作しますが、カーはそのバグを知っている理由で –

0

あなたがFを実行します:Pあなたが実際にFやっている "点に" Pの(機能)。

P:func [] []をもう一度実行すると、という新しい関数が作成され、Pのみに値が割り当てられます。

間接を持っている唯一の方法は、アクセサ経由で、Fのようなもの:ない[P]、pは値を変更したときにPの結合が変更されていないので、

fが新しい関数を呼び出すために知っているだろう、その値(新しい関数)のみを返します。

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

関連する問題