在脚本语言中的美元符号-为什么

Dollar notation in script languages - why?

本文关键字:符号 为什么 美元 脚本 语言      更新时间:2023-09-26

有谁知道,在某些脚本语言中,例如PHP或Perl,"美元变量表表法"背后的实际原因是什么?Python的创建者没有发现$variable有用,我也没有。为什么PHP和Perl总是强迫我按shift-4键?

(好吧,在Perl中你可以用区分$scalar, @array%hash来解释它但仍然可以成功地避免它,类型不需要显式)

我不知道这是否是主要原因,但如果PHP没有带有标识标记的变量,那么以下内容将不可能实现。

echo "Welcome back $name, we last saw you on $date";
更新:

它还创建了一个变量变量可能。变量变量的有用性是有争议的,我不建议任何人经常使用它们。

Perl变量的设计目标之一是使它们在视觉上与内置词、保留词、控制流词等区别开来。对于不熟悉Perl的人来说,所有的线索可能看起来像行噪音。但是对于精通Perl的人来说,所谓的"符号"使代码更具可读性和可理解性。正如您已经观察到的,Perl5中的符号类型根据所访问的底层数据而变化。$表示标量,@表示数组,%表示散列。

但是有一个额外的视觉提示,即$hash{key}引用了哈希中保存的标量值。$符号表示标量,{}括号表示我们正在索引到散列(仅作为示例)。在索引数组的情况下,以$array[0]为例:$告诉我们,我们正在访问数组中保存的标量值,在方括号内的索引点上,方括号表明了这一点。当我们看到@array[1, 2, 3]时,我们通过@立即看到我们正在从数组中抓取元素列表(假设是列表上下文)(方括号仍然告诉我们我们正在从数组中获取它们)。这是一个数组切片。哈希片将是@hash{qw/ this that the other/}。所以再一次,@告诉我们要寻找一个列表,花括号告诉我们要从哈希中得到它们。当我们看到没有后缀括号的@%时,我们取的是整个数组或哈希值。

这些暗示很快就变成了第二天性。

Perl6略有不同,熟练的Perl5用户需要几天的时间来适应。;)

维基百科上有一篇关于这个主题的好文章:Sigil(计算机编程)

除了视觉指南,符号也使其他事情变得更容易;例如解引用和插值。虽然更精细的运算符可以用于插值之类的事情(并且偶尔仍然需要消除变量结束和相邻单词字符继续的歧义),但目标可能是使简单的事情变得容易,同时使困难的事情成为可能。

Perl中的自然语言原理:

语言能够摆脱某些局部歧义的部分原因是其他的歧义被各种机制所抑制。英语使用数和词序,代词中有格制的痕迹:"这个男人看着那些男人,他们也看着他。"在这句话里,谁对谁做了什么非常清楚。类似地,Perl在其名词上有数字标记;也就是说,$dog是一只狗,而@dog(可能)是多只狗。所以$@有点像英语中的"this"answers"these"。

他们在解析时使用它,这样变量可以很容易地与其他东西区分。