【问题标题】:What is the benefit of Sigils in Perl? [closed]Perl 中的 Sigils 有什么好处? [关闭]
【发布时间】: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]]

标签: perl sigils


【解决方案1】:

最好的解释是在 perldoc 中的perldata。它们的功能类似于自然语言中的冠词和代词。

“$”符号在语义上与英语单词“the”类似,因为它表示需要单个值。

整个数组(以及数组和哈希的切片)用“@”表示,这与英语中的“这些”或“那些”这个词的作用非常相似,因为它表示需要多个值。

Perl 6 采用了不同的方式,因此对其价值的看法各不相同,但这就是它们背后的理论。

【讨论】:

  • 问题是编程不是用自然语言说话。某些事情不适用。编程需要对语义和定义更加严格。无论如何,引用拉里沃尔的推理并不能回答这个问题。
  • @user63438 这不是 Larry Wall 的一些格言,这是 Perl 的文档,说明了它为何如此。是的,Perl 6 朝另一个方向发展,因为它似乎不是很有用。
  • 我明白拉里为什么要这么做。我想知道,事后看来,它是否有任何实际用途。到目前为止,我还没有听到任何消息,而且 perl 6 选择了一致的印记方法。如前所述,如果 sigils 是常量,则可以将它们替换为约定,然后将其替换为一个空字符串作为约定,然后替换为空,我们又回到了没有 sigils 的状态。
猜你喜欢
  • 2014-02-24
  • 1970-01-01
  • 1970-01-01
  • 2010-10-10
  • 2012-06-05
  • 2011-04-26
  • 2011-01-03
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多