ruby syntactic sugar:处理nils

luc*_*uca 5 ruby idioms

可能已经问过但我找不到..这里有两种常见的情况(对我而言编程rails ..)在ruby中写的很令人沮丧:

"a string".match(/abc(.+)abc/)[1]
Run Code Online (Sandbox Code Playgroud)

在这种情况下,我得到一个错误,因为字符串不匹配,因此调用[]运算符为零.我想要找到的是一个更好的替代方案:

temp="a string".match(/abc(.+)abc/); temp.nil? ? nil : temp[1]
Run Code Online (Sandbox Code Playgroud)

简而言之,如果它不匹配则只返回nil而没有错误

第二种情况是这样的:

var = something.very.long.and.tedious.to.write
var = something.other if var.nil?
Run Code Online (Sandbox Code Playgroud)

在这种情况下,我想只在不是nil的情况下为var分配一些东西,如果它是零,我将分配something.other ..

有什么建议吗?谢谢!

tok*_*and 0

首先,我推荐ick 's maybe(相当于andand

"a string".match(/abc(.+)abc/).maybe[1]
Run Code Online (Sandbox Code Playgroud)

我不确定我是否理解第二个,你想要这个吗?

var = something.very.long.and.tedious.to.write || something.other
Run Code Online (Sandbox Code Playgroud)