Rebol脚本错误:别名单词已被使用:f而不是真的

时间:2009-09-12 19:11:32

标签: rebol

我在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"

事实并非如此,事实上当我输入源码f时,它表示未定义:

>> source f
f: undefined
>>

为什么这条消息?

2 个答案:

答案 0 :(得分:1)

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

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

现在,您还没有定义它。但是如果你在开始一个新的控制台时检查已经定义的总工作量,你可能会惊讶地看到它们有几千个:

 print length? first system/words

并且(至少我试过它的R2版本),包括 f 这个词:

find first system/words 'f

尽管 f 没有当前值,但之前使用的这一事实使其停止与 ALIAS 一起使用。

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

答案 1 :(得分:0)

作为Rebol字典says请注意不要将别名与将另一个字设置为相同的值混淆。

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:lundimonday的法语单词。