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 时,它显示未定义:

>> source f
f: undefined
>>

那么为什么这个消息呢?

4

2 回答 2

1

可悲的是,REBOL 的ALIAS有一个严重的弱点,至少在 R2 中是这样:它只在全球范围内有效。

因此,如果任何进程已经使用了一个词,它就不能用于 ALIASing。

现在,您还没有定义它。但是,如果您在启动新控制台时检查已定义的总工作量,您可能会惊讶地发现它们有数千个:

 print length? first system/words

并且(至少在我刚刚尝试过的 R2 版本中),其中包括单词f

find first system/words 'f

尽管f没有当前值,但它先前已被使用的事实阻止了它与ALIAS一起使用。

ALIAS是 R3 中删除的有力候选者,因为它在使用中存在这个(和其他)限制。

于 2009-09-12T22:50:40.713 回答
0

正如 Rebol 字典所说注意不要将别名与将另一个单词设置为相同的值混淆。

alias是 Rebol 的另一个被忽视的特性。如果您只需要添加新名称来引用现有的全局值(包括函数),您可以直接执行此操作而无需alias

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

alias将允许您创建一个与原始符号相同的新符号。我们在这里谈论的是符号spelling等价,而不是单词meaning等价(最终引用的值)。别名最有用的用法之一是翻译可以用作原始词的直接替换的词。例如:

>> 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 回答