Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
为什么我在Ruby中看到两个表达式的结果不同,一个使用'&&';,其他用途';和';操作人员_Ruby_Expression - Fatal编程技术网

为什么我在Ruby中看到两个表达式的结果不同,一个使用'&&';,其他用途';和';操作人员

为什么我在Ruby中看到两个表达式的结果不同,一个使用'&&';,其他用途';和';操作人员,ruby,expression,Ruby,Expression,打印(-1==-1)和(myobj.nil?) 真的 打印(-1==-1)&(myobj.nil?) 假的 注意,myobj.nil?返回false 所以,这不应该总是错误的。因为它们具有不同的运算符优先级 第一种评估为: (print (-1 == -1)) and (myobj.nil?) 它打印true,因为-1==-1,然后print返回nil和nil,false为nil 第二个相当于: print ((-1 == -1) && (myobj.nil?)) 它打印(t

打印(-1==-1)和(myobj.nil?)

真的

打印(-1==-1)&(myobj.nil?)

假的

注意,myobj.nil?返回false
所以,这不应该总是错误的。

因为它们具有不同的运算符优先级

第一种评估为:

(print (-1 == -1)) and (myobj.nil?)
它打印true,因为-1==-1,然后print返回nil和
nil,false
为nil

第二个相当于:

print ((-1 == -1) && (myobj.nil?))

它打印(true和false),这是false,然后print返回nil。

,因为它们具有不同的运算符优先级

第一种评估为:

(print (-1 == -1)) and (myobj.nil?)
它打印true,因为-1==-1,然后print返回nil和
nil,false
为nil

第二个相当于:

print ((-1 == -1) && (myobj.nil?))

它打印(true&&false),该值为false,然后打印返回nil。

&&
的优先级不同。特别是,
的优先级非常低,几乎比其他任何东西都低

print
的返回值是
nil
,至少在Ruby 1.8中是这样。因此,第一个表达式如下所示:

(print (-1 == -1)) and myobj.nil?
(print    true)    and myobj.nil? # => with the side-effect of printing "true"
      nil          and myobj.nil?
      nil
print ((-1 == -1) && myobj.nil?)
print (   true    && myobj.nil?)
print                myobj.nil?
print                 false       # => with the side-effect of printing "false"
            nil
第二个表达式如下所示:

(print (-1 == -1)) and myobj.nil?
(print    true)    and myobj.nil? # => with the side-effect of printing "true"
      nil          and myobj.nil?
      nil
print ((-1 == -1) && myobj.nil?)
print (   true    && myobj.nil?)
print                myobj.nil?
print                 false       # => with the side-effect of printing "false"
            nil

&&
具有不同的优先级。特别是,
的优先级非常低,几乎比其他任何东西都低

print
的返回值是
nil
,至少在Ruby 1.8中是这样。因此,第一个表达式如下所示:

(print (-1 == -1)) and myobj.nil?
(print    true)    and myobj.nil? # => with the side-effect of printing "true"
      nil          and myobj.nil?
      nil
print ((-1 == -1) && myobj.nil?)
print (   true    && myobj.nil?)
print                myobj.nil?
print                 false       # => with the side-effect of printing "false"
            nil
第二个表达式如下所示:

(print (-1 == -1)) and myobj.nil?
(print    true)    and myobj.nil? # => with the side-effect of printing "true"
      nil          and myobj.nil?
      nil
print ((-1 == -1) && myobj.nil?)
print (   true    && myobj.nil?)
print                myobj.nil?
print                 false       # => with the side-effect of printing "false"
            nil

但为什么在这种情况下,-1==-1的计算结果总是true,而myobj.nil呢?计算结果为false。因此,净结果应该始终为false。哦,好吧,那么如果在if(-1==-1)和(myobj.nil?)这样的条件表达式中使用它,那么它们的结果是相同的?@Shekhar:print
的返回值是
nil
,至少在Ruby 1.8中是这样。因此,第一个表达式的大小如下:
(print(-1==-1))和myobj.nil?
→ <代码>(打印正确)和myobj.nil?→
nil和myobj.nil?
(具有打印true的副作用)→
nil
,而第二个表达式的大小如下:
print(-1=-1)和&myobj.nil?
→ <代码>打印(真与否?→ <代码>打印myobj.nil?→ <代码>打印错误→ <代码>无(有打印错误的副作用)。Jorg,谢谢。这真的很有帮助,因为我从来没有意识到打印被认为是表达式的一部分。但在这种情况下,为什么这很重要,-1==-1的计算结果总是为true,而myobj.nil?计算结果为false。因此,净结果应该始终为false。哦,好吧,那么如果在if(-1==-1)和(myobj.nil?)这样的条件表达式中使用它,那么它们的结果是相同的?@Shekhar:print的返回值是
nil
,至少在Ruby 1.8中是这样。因此,第一个表达式的大小如下:
(print(-1==-1))和myobj.nil?
→ <代码>(打印正确)和myobj.nil?→
nil和myobj.nil?
(具有打印true的副作用)→
nil
,而第二个表达式的大小如下:
print(-1=-1)和&myobj.nil?
→ <代码>打印(真与否?→ <代码>打印myobj.nil?→ <代码>打印错误→ <代码>无(有打印错误的副作用)。Jorg,谢谢。这真的很有帮助,因为我从未意识到打印被认为是表达式的一部分。欢迎使用StackOverflow!今后,请先搜索现有问题,然后再提出自己的问题。很可能,它已经被问到了,更重要的是,它已经得到了回答。这样,我们避免了重复,并将所有答案整齐地放在一个地方。可能的重复项:,,,。@Jörg:在堆栈溢出中搜索
&
无效,在“提问”中输入问题标题不会显示任何重复项。堆栈溢出的常客应该知道相关问题的存在。欢迎来到堆栈溢出!今后,请先搜索现有问题,然后再提出自己的问题。很可能,它已经被问到了,更重要的是,它已经得到了回答。这样,我们避免了重复,并将所有答案整齐地放在一个地方。可能的重复项:,,,。@Jörg:在堆栈溢出中搜索
&
无效,在“提问”中输入问题标题不会显示任何重复项。不过,堆栈溢出的常客应该知道存在相关的问题。