代码之家  ›  专栏  ›  技术社区  ›  Chris Doyle

如果“condition”,则“do something”的语法

  •  2
  • Chris Doyle  · 技术社区  · 7 年前

    在我使用Perl的这段时间里,我已经知道了三种使用方法 if .

    if(condition){
      "do this";
      "do that";
    }
    
    "do this" if condition; 
    
    condition ? "do this" : "or this";
    

    不过,我认为只有在只执行一个命令的情况下才能使用最后两个命令。然而,最近我了解到,当使用第二个选项时,可以用逗号分隔多个命令。

    perl -e '$count++, $var="Hello" if 4 < 5; print "COUNT: $count, VAR: $var\n"'
    COUNT: 1, VAR: Hello
    

    我意识到用例是有限的,但它激发了我的兴趣。我试图通过perldoc查找记录此行为的语法,但看不到任何解释,如果用逗号分隔,则可以使用多个命令的语法。

    这种行为是特定于以这种方式使用if语句,还是由于perl的某些其他特性而起作用?如果有人能告诉我有关行为的任何文件,那就太好了。

    1 回复  |  直到 7 年前
        1
  •  5
  •   simbabque    7 年前

    这种行为是特定于以这种方式使用if语句,还是由于perl的某些其他特性而起作用?

    ,这不是特定于修复后 if . 事实上,每个语句都可以是一个列表。有时这是有道理的,有时却没有。

    print 1, 2;
    print(1, 2);
    print( (1, 2) );
    print( ( (1), (2) ) );
    

    这些都是相等的,因为列表将在Perl中展开。同样的方法,你可以在那里有函数调用。

    foo(), bar();
    ( foo(), bar() );
    

    关联性并不总是像这里那么清楚,所以在某些情况下使用括号是有意义的。

    但是,如果你想要一个后期修复 如果 一个街区,你应该用一个街区。你在题目里回答了你自己的问题,真的。使用 do 语言结构。

    do {
        foo();
        bar();
    } if $condition;
    

    当然,如果你这样做,你也可以用 如果 块。