Ruby | |和救援有什么不同?

Ruby | |和救援有什么不同?,ruby,Ruby,在Ruby中使用|操作符和rescue有什么区别吗 说: 对象A没有值方法。对象是或运算符。你的第一行是: 将b设置为A值;如果不是b(即b为nil或false),则将其设置为字符串“5” Rescue允许您从异常中恢复。你的第二行是: 将b设置为A.value。如果A.value引发异常,请忽略该问题并将b改为5 对于没有值方法的对象,第一行将使应用程序崩溃 对于value方法返回nil的对象A,第二行将b设置为nil。|是布尔or运算符(请记住,在Ruby中,在布尔上下文中,只有值nil和f

在Ruby中使用
|
操作符和
rescue
有什么区别吗

说:


对象
A
没有
方法。

对象
运算符。你的第一行是:

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

Rescue允许您从异常中恢复。你的第二行是:

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

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


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

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

rescue
用于异常捕获:

fail 'bang' rescue 5
# => 5

'bang' rescue 5
# => "bang"

nil rescue 5
# => nil
在您的示例中,假设
A
不响应

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

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

b = A.value rescue 5
b
# => 5
现在假设
A.value
返回
nil

A.value
# => nil

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

b = A.value rescue 5
b
# => nil

除了其他人已经告诉您的以外,还有一个区别是,
|
是一个诚实的操作员,而内联
rescue
相当于rescuin
StandardError
,这是很重要的。换句话说,内联
rescue
是一种不雅的黑客行为,不应该在生产代码中频繁使用。使用穿着得体的
开始。。。拯救。。。其他的确保改为结束
语句。

A.value总是返回nil而不是找不到方法,这是否好?
A.value
# NoMethodError: undefined method `value' ...

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

b = A.value rescue 5
b
# => 5
A.value
# => nil

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

b = A.value rescue 5
b
# => nil