Ruby 的“如果它不是空白就使用这个,否则使用那个"的简写 [英] Ruby shorthand for "use this if it isn't blank, otherwise use that"

查看:22
本文介绍了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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆