【问题标题】:How do you store a result to a variable and check the result in a conditional?如何将结果存储到变量并在条件中检查结果?
【发布时间】:2011-02-11 05:54:40
【问题描述】:

我知道这是可能的,但我在语法上画了一个空白。你如何做类似于以下的事情作为条件。 5.8,所以没有切换选项:

while ( calculate_result() != 1 ) {
    my $result = calculate_result();
    print "Result is $result\n";
}

只是类似于:

while ( my $result = calculate_result() != 1 ) {
    print "Result is $result\n";
}

【问题讨论】:

    标签: perl perl5.8


    【解决方案1】:

    您需要添加括号来指定优先级,因为!= 的优先级高于=

    while ( (my $result = calculate_result()) != 1 ) {
        print "Result is $result\n";
    }
    

    【讨论】:

    • 就是这样。忘记 = 返回分配的值。谢谢!
    【解决方案2】:

    kemp 有关于优先级的正确答案。我只想补充一点,在循环条件中执行涉及赋值和比较的复杂表达式会使代码很快变得丑陋和不可读。

    我会这样写:

    while ( my $result = calculate_result() ) { 
        last if $result == 1;
        print "Result is $result\n";
    }
    

    【讨论】:

    • 这与OP的含义不同。如果$result 为假,OP 仍将执行该块。
    • 是的,这确实是在使用DateTime的compare(),它是用于覆盖并返回-1、0或1的sub。我需要在它为-1或0时执行代码而不是在 1 时,在 -1 和 0 时采用不同的路径。while($result = compare( $time_a, $time_b)) 基本上永远不会执行。
    【解决方案3】:

    有什么问题:

    $_ = 1;
    sub foo {
       return $_++;
    }
    while ( ( my $t = foo() ) < 5 )
    {
       print $t;
    }
    

    结果为 1234

    【讨论】:

      【解决方案4】:

      你很亲密……

      while ( (my $result = calculate_result()) != 1 ) {
          print "Result is $result\n";
      }
      

      【讨论】:

        猜你喜欢
        • 2019-12-29
        • 2022-01-25
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多