为什么Perl中的'last'被称为'last'?

kno*_*orv 12 syntax perl language-features language-design

什么是历史原因给last被称为是在Perl,而不是break因为它是所谓的C 2

Perl的设计受C的影响(除了awk,sed和sh - 参见下面的man page),因此必须有一些推理背后不能使用熟悉的C风格的break/last命名.

Perl 1.000(1987年12月18日发布)手册页的一些历史:

[Perl]结合(在作者看来,无论如何)C,sed,awk和sh的一些最佳功能,所以熟悉这些语言的人应该没有什么困难.(语言历史学家也会注意到一些csh,Pascal,甚至是BASIC | PLUS的痕迹.)

小智 33

'break'或'last'的语义由语言(在本例中为Perl)定义,而不是由您定义.

为什么不将'last'视为"这是为循环运行的最后一个语句".

我总是觉得奇怪的是'C'中的'continue'语句开始循环的下一遍.这绝对是"继续"概念的奇怪用法.但它是'C'的语义,所以我接受它.

通过尝试将特定的编程概念映射到具有现有含义的单个英语单词,总会出现某种不匹配的奇怪现象

资源

另外,拉里沃尔有点奇怪.你见过他的照片吗?

Larry Wall http://www.wired.com/images/article/full/2007/12/larry_wall_250px.jpg

  • 拉里的照片很奇怪?与这些家伙相比?http://upload.wikimedia.org/wikipedia/commons/3/36/Ken_n_dennis.jpg (20认同)
  • +1照片.这对我来说足够了;) (7认同)
  • 我以为他们用夏威夷衬衫烧掉了他所有的照片. (4认同)

Dav*_*man 17

我希望这是因为Perl是由语言学家创建的,而不是计算机科学家.在正常的英语用法中,声明你已完成最后一遍循环的概念与单词"last"("这是最后一遍")的关系比"break" 这个词更强烈(" 打破循环" "?" 突破循环"? - 甚至不清楚"破解"是指与退出循环有关.

  • "Perl是由语言学家创造的"是为什么它看起来像噪音? (4认同)
  • 我们可以跳过语言抨击吗?我不喜欢语法上重要的空白,所以我不使用Python - 但我也不去寻找机会告诉大家Python很糟糕.如果你不喜欢sigils(我最好猜你的意思是"看起来像线路噪音"),那就完全没问题了.不要使用Perl,PHP,Ruby或任何其他使用它们的语言.但你真的不得不围绕网络做出关于你不喜欢他们的偏离主题的评论吗? (4认同)

bri*_*foy 14

当你记得你可以使用它而不仅仅是直接循环控制时,术语'last'更有意义.您可以将它应用于标记块上面的块上方的一个或多个级别:

 LINE: while( <> ) {
      WORD: foreach ( split ) {
           last LINE if /^__END__\z/;
           ...
           }
      }
Run Code Online (Sandbox Code Playgroud)

当你把它读作"如果它匹配的最后一行......"时,它会更自然地用英语说"最后".

  • 好吧,我看到的不同了.它告诉我"你正在做的事情是最后一个".如果我说"这是我的最后一手牌",就像扑克一样; 这并不意味着我要打一场比赛. (4认同)
  • 你知道,这就是我认为奇怪的事情."最后一行"最后一次没有进入LINE,它进入了LINE标记的控制端.它正在某个地方与它提到的标签有着非常微弱的联系. (2认同)
  • @Paul:我认为那里的理解必须来自你现有的编程经验.我不知道任何语言都有一个声明说"好的,退出当前的迭代,然后再开始一次迭代,但在此之后停止." 所以我不希望"最后"这样做.鉴于"继续"之类的选择和"休息"之类的选择,更明显的是Perl的"下一个"和"最后一个"必须意味着什么. (2认同)

Ken*_*ric 10

您还可以考虑另外一个原因:

最后不仅仅是循环控制.

sub hello {
  my ( $arg ) = @_; 

  scope: { 
      foo(); 
      bar(); 
      last if $arg > 4; 
      baz(); 
      quux(); 
  }
}
Run Code Online (Sandbox Code Playgroud)

最后,因为一般的流量控制机制不限于循环.当然,你可以将上面的内容概括为一个最多运行1次的循环,但是对我来说没有循环表示"Break?我们有什么突破?"

相反,我认为" last"跳到" 最后一个支架的位置",这是为了这个目的,在语义上更合理.


Pas*_*cal 6

我向Damian Conway问了同样的问题say.Perl 6将介绍say,这不过print是自动添加换行符.我的问题是为什么不简单地使用echo,因为这是echo在Bash(可能在其他地方)做的事情.

他的答案是:echo长33%say.

他有一点意见.:)


Pau*_*lin 5

因为它进入循环的最后一个.因为拉里沃尔是个怪人.

  • 当他在一个普通人会用来形容它的一个词后命名一个算子时,为什么他很奇怪?计算机爱好者认为我们应该像微处理器一样思考这些奇怪的东西. (13认同)
  • 好的,我们休息吧.最后. (7认同)
  • @surfrman:除非你从之前的编程语言中学到它,否则break对你来说永远不会有意义."最后"对于未受感染的人来说非常有意义. (6认同)
  • @surfrbum提出了一个没有破坏的问题.'break'不符合next或redo.我知道你只是想要狡猾,但这没有用. (3认同)
  • 嗯,我的意思是当他命名时他很奇怪,但是很好. (2认同)
  • "最后"给我说"做循环的最后一次迭代",而不是"彻底摆脱循环".这就是它的奇怪之处. (2认同)