多年前,我学习了Applesoft Basic。字符串始终后缀为$
,数组后缀为%
。这就是语言的工作方式。您看了一下,知道了那是什么。我从来没有深入研究解释器来理解为什么是这种情况,或者是由于设计决策才如此。
php中的sigil源自其perl影响(受awk
和影响sh
)。perl中的标记不仅$
可以识别许多不同的类型,还远远不够:
$
标量
@
清单
%
杂凑
&
代码块
*
类型球
标记标识您正在查看的符号表结构的哪一部分。在幕后,foo的符号表条目(通过*foo
-typeglob 访问)具有可能是foo的所有内容。有$foo
,@foo
,%foo
,的格式 foo
,&foo
中,文件句柄富,等...
这也可以使一个变量成为另一个变量的别名:
#!/usr/bin/perl
$foo = "foo";
@qux = (1,2);
*bar = \$foo;
*bar = \@qux;
print "$bar @bar\n";
这会打印出来foo 1 2
-在perl中,这就是这些签名的真正目的,不是您应该执行此操作,而是在后台执行此操作。
信号的可读性不是很多,而是使一个信号可以在名称空间中发生冲突$foo
而@foo
不会发生冲突(比较其他两种语言不能同时存在的情况int foo; int[] foo;
)
可读性标记是任何语言的一部分-读取语法。假设您可以强制类型本身(作为匈牙利符号)作为标识符的一部分。
lex中的内容类似于:
typeChar [is]
capLetter [A-Z]
letter [a-z]
digit [0-9]
%%
{typeChar}{capLetter}(letter}|{digit})* { prientif("iddentifier");}
%%
然后你可能会像
iFoo = 42;
sFoo = "a string";
iBar = iFoo * 2;
我并不是说这是个好主意,而是让熟悉该语言的人能够以本机阅读,并认为它可以增强可读性,而对语言不熟悉的人可能会认为它只是增加了语言杂乱无章。
但是,使用这种方式定义的语言后,我可能可以轻松阅读它。
有些人喜欢他们,有些人不喜欢。在各个论坛中都发生了激烈的圣战,辩论的确如此,这归结为您使用了多少圣战。
可以为非程序员设计一种使用信号的新语言,任何从未编程的人都不会抱怨它们。另一方面,您不能将它们作为语言的一部分,然后让ruby或perl程序员抱怨他们缺少一些关键信息。
真的没关系。重要的是,无论是否使用信号,该信号都将适合该信号。您想做"123 $foo 456"
还是必须做"123 " + foo + " 456"
?这是应该做出决定的地方。