5

是不是在大多数情况下,在 Ruby 中,最好使用&&,||而不是and, or,除非是一些特殊情况。

我认为 Ruby 的设计原则之一是尽可能减少意外,因此使用and,或者or实际上有一些意外......例如and优先级不高于or,而&&优先级高于||.

所以我认为在大多数情况下,使用&&, ||。在某些特殊情况下,它可能需要使用and, or,但我认为如果它们与 , 混合使用&&||迟早会在不久前开始使用 Ruby 的同事需要编辑您的代码时产生错误。

4

3 回答 3

7

“The Ruby Programming Language”一书(David Flanagan 和 Yukihiro Matsumoto)给出了使用“and”的两个理由。

  • 可读性:

    if x > 0 and y > 0 and not defined? d then d = Math.sqrt(x*x +y*y) end

  • 充分利用较低的优先级:

    if a = get_from_db(x) and b = get_from_db(y) then do_stuff_with_true_values(a, b) end

(由我改编的代码)最后一个不能与'&&'一起使用。

就个人而言,为了便于阅读,我将“and”和“or”与括号结合使用,以防有疑问。

于 2010-09-29T22:35:57.880 回答
7

是的。依赖布尔逻辑是在应用程序andor引入细微错误的好方法。

不过,他们确实有一席之地。当用作控制流运算符时,它们是一个安全且可读的选项。

redirect_to root_url and return

在我阅读这篇出色的博客文章之前,我基本上感觉到了你的做法。

于 2010-09-29T22:15:26.697 回答
2

这是因为and, or&not的优先级低于&&,||!

为什么?因为它源于 Perl。 作为语言学家的拉里·沃尔(Larry Wall )希望以下工作:

open my $fh, "<", $filename or die $!;

如果您将 替换为or||那么该语句将被解析如下:

open my $fh, "<", ($filename || die $!);

哪个不好!

因此,对于像 Perl 和 Ruby 这样的语言,括号通常是可选的,那么这就是解决方案。否则你需要写:

open( my $fh, "<", $filename ) || die $!;

请参阅perlop 的“逻辑非、与、或、定义或、以及异或&& Perl 和 Ruby中的逻辑运算符”,了解完整的内容。

/I3az/

于 2010-09-30T08:26:49.340 回答