【发布时间】:2018-05-09 15:23:15
【问题描述】:
我了解印记的规则。我可以从列表中制作散列,并与其中的平庸者一起传递参考。我不明白的是 Perl 提供的 好处 印记。
我听说的一些原因是:
- 字符串插值
- Ruby 具有“#{myVar}”语法,它几乎可以解决所有这些问题,包括无需求助于“@{[$count + 1]}”即可拥有完整的表达式语法技巧。
- 可读性
- IDE。任何值得加盐的文本编辑器都具有语法高亮功能。
- 允许变量 subNamespacing
- 允许我将 $foo 和 @foo 声明为两个不同的变量只会导致未来的毁灭。
编程语言中一个非常有用的特性是一致性。我的好奇心驱使我问我是否将列表声明为“@foos”和计数器“$count”,需要通过说“$foos[$count]”来访问元素有什么意义?哦!但是如果我将元素读入列表上下文中,我可以使用“@”;所以说“@foos[$idx1, $idx2]”现在是有道理的!通过查看印记,我可以看出我将读取一个数组而不是单个标量!
- 我仍然可以通过说“foos[count]”来判断我正在阅读单个元素
- 我仍然可以通过说“foos[idx1, idx2]”来判断我正在读取多个元素。
- 我仍然可以通过说“foos{key}”来判断我正在读取单个值
- 我仍然可以通过说“foos{key1, key2}”来判断我正在读取多个值
对于我能想到的几乎所有情况,同样的模式都适用。无论使用哪个印记,或者没有任何印记,所做的事情的含义都很清楚。唯一的区别是我必须跟踪上下文并确保将符号保持在一行中以及;
【问题讨论】:
-
反例:
@foos[$idx1]给你一个元素的列表,而$foos[$idx1]给你一个标量值。 -
IDE?我想你误解了
perl从哪里开始。 Perl 早于您似乎需要 以在某些语言中工作的 IDE。也许现在情况并非如此,但是......我仍然发现能够使用编程语言工作非常有用,只需要一个基本的文本编辑器。 -
Re "Sigils 在 Perl 中有什么好处?", 1) sigils 告诉变量的类型是什么,而无需使用匈牙利符号或类似符号。 (好吧,您实际上可以争辩说它是匈牙利符号的一种形式。) 2) 印记允许标量、数组、散列、子等具有相同的名称。 (这是否是一件好事是另一回事。)
-
对于 ikegami 来说,sigils 让 vim、npp++ 和 TextMate 等文本编辑器提供基于变量类型的语法样式,我觉得这很有用
-
cdhowie:在一个一致的世界里,@foos[$idx1] 会给你一个单一的元素,把它放在一个列表中意味着把它放在一个列表中:[@foos[$idx1]]