加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

Ruby默认赋值(|| =)vs Rescuing error

发布时间:2020-12-17 03:33:12 所属栏目:百科 来源:网络整理
导读:因为|| = 1相当于|| a = 1,可以说这是同义词糖: if a.nil? a = 1end 同样,假设该会话是类似哈希的对象,则以下内容: def increment_session_counter session[:counter] ||= 0 session[:counter] += 1end 相当于: def increment_session_counter if session
因为|| = 1相当于|| a = 1,可以说这是同义词糖:

if a.nil?
  a = 1
end

同样,假设该会话是类似哈希的对象,则以下内容:

def increment_session_counter
  session[:counter] ||= 0
  session[:counter] += 1
end

相当于:

def increment_session_counter
  if session[:counter].nil?
    session[:counter] = 0
  end
  session[:counter] += 1
end

这是否意味着每次在increment_session_counter的原始定义中都会执行隐式if语句?由于session [:counter]很可能仅在第一次为零(即<< <1%的时间),我觉得以下代码更好,因为隐式if不会每次都被触发:

def increment_session_counter
  session[:counter] += 1
rescue NoMethodError
  session[:counter] = 1
end

这种代码在这种意义上是否更好?

话虽如此,我不知道Rescue是如何在ruby中实现的,以及它是否真的与可以带来的微小优化有关.

解决方法

session [:counter] = 1有三件事:

>获取值(哈希#[])
>增加值(整数#)
>存储递增的值(Hash#[] =)

这很方便,但它的简洁也使它变得不灵活.

如果将步骤分开,则提供默认值会容易得多:

def increment_session_counter
  session[:counter] = session.fetch(:counter,0) + 1
end

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读