什么是Perl等同于C的返回和继续关键字?
当我使用此代码时,我收到此错误
sub search { my ($a,@a_list) = @_; foreach (@a_list) { if($_ == $a) return TRUE; # continue; } return FALSE; }
>什么是正确的方式返回TRUE? 我知道我应该在Perl中更多地思考,而不是以这种方式将C代码转换为Perl。 解决方法
回报等值,继续,休息
return是相当于return的。 ‘if’语句后跟块 你的问题是,一个if语句总是跟着大括号内的一个块。 if ($_ == $a) { return TRUE; } elsif (...) { ... } else { ... } 对于所有这些,有时候似乎有点冗长,我同意ysth这是Perl的对象。对于一个有趣的替代方案,请参阅Go编程语言,它将括号视为不必要的,并且要求大括号。 ‘if’可以用作限定词 或者您可以使用if作为语句修饰符: return TRUE if $_ == $a; 请注意,在这种情况下,您不必在条件表达式周围使用括号,尽管添加它们并不会有任何损害。 使用’除非’ 您也可以使用,除非如果反转条件: return TRUE unless $_ != $a; (而且,正如Phillip Potter所指出的那样,混合除非有一个否定条件使得理解更加困难;这个例子直接与问题一样,而是更好地写成如果平等的话)。 使用“下一个”和“最后” 你可以使用下一个和最后一个类似: sub search { my ($a,@a_list) = @_; foreach (@a_list) { return TRUE if $_ == $a; last if $_ > $a; next if $ptom != LAST_QUARTER; ... } return FALSE; } 请注意foreach循环中的修正。 (问题修改为包括修复。)确保您始终使用“严格”和“使用警告”在你的脚本的顶部。专家总是用它们来确保他们没有犯错。初学者应该使用它们完全相同的原因。 真假 另外,正如其他答案中首先指出的那样,Perl没有预定义的常量TRUE和FALSE,除C或C以外(C有一个内置的true和false; C99具有true和false有条件地可用,如果#包括< stdbool.h>)。您可以为Perl提供以下定义: use constant TRUE => 1; use constant FALSE => 0; 不要小心了。即使不等于TRUE,一些事情也将是“真实的”;即使不等于FALSE,其他事情也将是“假的”。 讨论使用’$ a’和’$ b’ 这些评论包含一个关于不使用$ a和$ b作为变量的讨论。依次,有关意见是: >请避免使用$ a,除非它在排序块中。 – Zaid 指出明显的:我只使用$ a,因为问题是 – 而不是淹没原来的海报有很多细节,我主要保持的要点。例如,上一个和下一个的讨论没有提到循环标签。 也就是说,建议“避免使用$ a和$ b作为变量”是声音;它们是指定的原因的特殊名称,并且使用它们留下可能或可能不被检测到的错误的可能性。 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |