2017-11-04 12 views
0

私はそれがローカル変数と同じ名前があるため、F内のグローバル変数aの値を変更することはできません:関数リターンを、aはまだ1の代わりに、12RebolまたはRedのローカル変数と同じ名前のグローバル変数を変更するにはどうすればよいですか?

私はグローバル変数を参照することができますどのように
a: 1 
f: func[a][set 'a a] 
>> f 12 
== 12 
>> a 
== 1 

ですa?グローバル変数のみを参照するように設定されていませんか?そうするためにローカル変数名を変更する必要があるのでしょうか、それとも両方の名前を保持する方法がありますか?

+1

を*「だけグローバル変数を参照するようになって設定されていない」*何あなたが考えるかもしれないことですSET-WORDを使うことの違い! FUNCTION本体で - 自動的にローカルが必要なことを示唆するために集められています。 FUNCTION本体でSET-WORD!sを使用しないようにして、LIT-WORDのSETを使って割り当てを行うことができます。この場合、LIT-WORD! FUNCTIONの前にボディコード内にhadを割り当てることは、割り当てに使用されます。 *(はい、これはRube-Goldbergのインスピレーションを受けたものです:-P)* – HostileFork

答えて

3

使用グローバルな文脈で単語へのアクセスを読み書き強制的にsystem/words/パス接頭辞:

>> a: 1 
>> f: func[a][system/words/a: a] 
== func [a][system/words/a: a] 
>> f 12 
== 12 
>> a 
== 12 
関連する問題