Ruby 的“如果它不是空白就使用这个,否则使用那个"的简写 [英] Ruby shorthand for "use this if it isn't blank, otherwise use that"
本文介绍了Ruby 的“如果它不是空白就使用这个,否则使用那个"的简写的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我有以下代码:
url = file.s3_url.blank? ? file.url : file.s3_url
有没有更短的写法?
谢谢!
推荐答案
好吧,你可以在任何 file
的实例上编写一个方法(比如 S3File
):
Well, you could write a method on whatever file
is an instance of (say S3File
):
class S3File
def real_url
self.s3_url.blank? ? self.url : self.s3_url
end
#...
end
然后就变得很简单了:
url = file.real_url
正如@tokland 所说,您可以猴子补丁 Object
以使用 or_if
方法,其实现方式如下:
As @tokland said, you could monkey patch Object
to use an or_if
method, which would be implemented like this:
class Object
def or_if(method, val = nil)
self.send(method) ? (block_given? ? yield : val) : self
end
end
这样,你就可以做到这一点:
This way, you'd be able to do this:
url = file.s3_url.or_if(:blank?) { file.url }
或者这个:
url = file.s3_url.or_if(:blank?, file.url)
这篇关于Ruby 的“如果它不是空白就使用这个,否则使用那个"的简写的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文