用ruby最佳实践替换三元nil检查

use*_*902 3 ruby ruby-on-rails

some_method的返回结果为nil时,我发现自己做了很多事情来防止nil。

a = a.some_method.present? ? a.some_method : []
Run Code Online (Sandbox Code Playgroud)

还有更红宝石的方法吗?我试过使用

a = []
a ||= a.some_method
Run Code Online (Sandbox Code Playgroud)

但是那当然会给我

a = []
Run Code Online (Sandbox Code Playgroud)

谢谢!

Dan*_*ens 5

通常的模式是:

result = method(args) || default_value
Run Code Online (Sandbox Code Playgroud)

||操作是短路。如果左侧为假,则无需费力评估右侧。在Ruby中,nil被认为是错误的。因此,如果nil返回(或false),则||计算结果为右侧,并将其作为结果返回。

请注意,左侧和右侧的顺序很重要。