可能已经问过了,但是我找不到..这里有两种常见的情况(对于我来说,在编程rails时)。在ruby中编写是令人沮丧的:
"a string".match(/abc(.+)abc/)[1]在这种情况下,我得到一个错误,因为字符串不匹配,因此在nil上调用[]运算符。我想要找到的是一个比下面的更好的选择:
temp="a string".match(/abc(.+)abc/); temp.nil? ? nil : temp[1]简而言之,如果不匹配,只需返回nil而不返回错误
第二种情况是这样的:
var = something.very.long.and.tedious.to.write
var = something.other if var.nil?在本例中,我只想在不为nil的情况下为var赋值,以防为nil赋值为something.other。
有什么建议吗?谢谢!
发布于 2010-12-31 03:19:06
对于第一个,我推荐ick的maybe (相当于andand)
"a string".match(/abc(.+)abc/).maybe[1]我不确定我是否理解第二个,你想要这个吗?
var = something.very.long.and.tedious.to.write || something.other发布于 2010-12-31 03:35:20
在Ruby on Rails中,您可以在任何对象上使用try方法。根据该接口:
调用由symbol方法标识的方法,向它传递任何参数和/或指定的块,就像常规的Ruby Object#send一样。
但是,与该方法不同的是,如果接收对象是nil对象或NilClass,则不会引发NoMethodError异常,而是返回nil。
因此,对于第一个问题,您可以这样做:
"a string".match(/abc(.+)abc/).try(:[], 1)它会给你一个没有错误的1或nil。
发布于 2010-12-31 03:40:33
"a string"[/abc(.+)abc/, 1]
# => nil
"abc123abc"[/abc(.+)abc/, 1]
# => "123"和:
var = something.very.long.and.tedious.to.write || something.other请注意,与||相比,or具有不同的运算符优先级,对于这种用法,应首选||。or运算符用于流控制用途,如ARGV[0] or abort('Missing parameter')。
https://stackoverflow.com/questions/4565496
复制相似问题