Ruby里关于简写的问题?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (16)

我有以下代码:

url = file.s3_url.blank? ? file.url : file.s3_url

有更短的方法来写这个吗?

提问于
用户回答回答于

那么,你可以在任何一个file的实例上写一个method:

class S3File 
   def real_url
     self.s3_url.blank? ? self.url : self.s3_url
   end
   #...
end

然后:

url = file.real_url 

可以用修补程序Object来使用一种or_if方法,它可以这样实现:

class Object
   def or_if(method, val = nil)
      self.send(method) ? (block_given? ? yield : val) : self
   end         
end

这样,你可以做到:

url = file.s3_url.or_if(:blank?) { file.url }

或:

url = file.s3_url.or_if(:blank?, file.url)
用户回答回答于

扫码关注云+社区