What is different between || and rescue?

Kit*_* Ho 4 ruby

使用||运算符和rescueRuby 之间有什么区别吗?

说:

b = A.value || "5"

b = A.value rescue 5
Run Code Online (Sandbox Code Playgroud)

对象A没有value方法的地方.

tor*_*o2k 9

||是布尔值或运算符(请记住,在Ruby中,只有值,nil并false在布尔上下文中求值为false):

nil || 5
# => 5

false || 5
# => 5

4 || 5
# => 4
Run Code Online (Sandbox Code Playgroud)

rescue 用于异常捕获:

fail 'bang' rescue 5
# => 5

'bang' rescue 5
# => "bang"

nil rescue 5
# => nil
Run Code Online (Sandbox Code Playgroud)

在您的示例中,假设A不响应value:

A.value
# NoMethodError: undefined method `value' ...

b = A.value || 5
# NoMethodError: ...
b
# => nil

b = A.value rescue 5
b
# => 5
Run Code Online (Sandbox Code Playgroud)

现在假设A.value返回nil:

A.value
# => nil

b = A.value || 5
b
# => 5

b = A.value rescue 5
b
# => nil
Run Code Online (Sandbox Code Playgroud)


Den*_*rdy 8

这||是一个or运营商.你的第一行写道:

将b设为A.value; 如果不是b(即b为nil或false),则将其设置为字符串"5".

Rescue可让您从异常中恢复.你的第二行写道:

将b设置为A.value.如果A.value引发异常,请忽略该问题并将b设置为5.

对于没有值方法的对象A,第一行将使应用程序崩溃.

对于value方法返回nil的对象A,第二行将b设置为nil.