use*_*677 2 ruby ruby-on-rails activesupport
我想要一个干净的代码,我觉得这很笨重.
有一个更好的方法吗?
User.try(:profile).try(:settings).try(:card).try(:options)
Run Code Online (Sandbox Code Playgroud)
如果我删除了try方法,我会得到一个nil方法错误.
是否还有另一段代码可以执行以下操作:
User.try(:profile,:settings, :card, :options)
Run Code Online (Sandbox Code Playgroud)
从ruby 2.3.0开始,您可以使用&.方法代替try:
User&.profile&.settings&.card&.options
Run Code Online (Sandbox Code Playgroud)
但你应该避免这样的事情.
当您向可能返回nil的对象发送消息或者对象没有响应该消息时,这是一个您应该自己解决的问题.使用try只会加剧问题,就像nil-checking那样.编写一致行为的一致接口.
| 归档时间: |
|
| 查看次数: |
99 次 |
| 最近记录: |