0

これらのエイリアスをuser.rで定義しました

alias 'powershell "pw"
alias 'explorer "o"
alias 'open-program-files "pf"
alias 'cmd "dos"
alias 'edituser "eu"
alias 'run-firefox "fx"
alias 'run-firefox "f"

rebolを起動すると、次のように表示されます

** Script Error: Alias word is already in use: f
** Near: alias 'run-firefox "f"

これは真実ではありません。実際、source fと入力すると、undefinedと表示されます。

>> source f
f: undefined
>>

では、なぜこのメッセージなのか?

4

2 に答える 2

1

悲しいことに、REBOL のALIASには深刻な弱点があり、少なくとも R2ではグローバルにしか機能しません。

そのため、いずれかのプロセスがすでに単語を使用している場合、その単語はエイリアスに使用できません。

今、あなたはそれを定義していません。しかし、新しいコンソールを起動したときに既に定義されている総作業数を確認すると、数千の作業があることに驚くかもしれません:

 print length? first system/words

そして(少なくとも私が試したばかりのR2のバージョンでは)、それにはfという単語が含まれています:

find first system/words 'f

fには現在の値がありませんが、以前に使用されていたという事実だけで、 ALIASで使用されなくなります。

ALIASは、この (およびその他の) 使用上の制限のため、R3 で削除される有力な候補です。

于 2009-09-12T22:50:40.713 に答える
0

Rebol 辞書に次のように書かれています。別の単語を同じ値に設定することとエイリアスを混同しないように注意してください。

aliasRebol のもう 1 つの見落とされている機能です。既存のグローバル値 (関数を含む) を参照するために新しい名前を追加する必要がある場合は、alias.

pw:  :powershell
o:   :explorer
pf:  :open-program-files
dos: :cmd
eu:  :edituser
fx:  :run-firefox
f:   :run-firefox

alias元のシンボルと同じように動作する新しいシンボルを作成できます。spellingここでは、単語meaningの等価性 (最終的に参照される値)ではなく、シンボルの等価性について話しています。エイリアシングの最も有用な使用法の 1 つは、元の単語のドロップイン置換として使用できる単語の翻訳です。例えば:

>> alias 'monday "lundi"
== lundi
>> 'monday = 'lundi
== true
>> find [friday monday sunday] 'monday
== [monday sunday]
>> find [friday monday sunday] 'lundi
== [monday sunday]

ご覧のように、別名を付けた単語を使用すると、同じ単語に対して異なるスペルを作成できるため、別名を変更せずに同じコードで処理できます。

別名の単語は、一部の方言のショートカット ワードを作成するのにも役立ちますが、その機能を活用した Rebol の方言はこれまでのところ知りません。

PS:lundiはフランス語でmonday.

于 2015-12-14T06:33:13.907 に答える