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有三件事:
>获取值(哈希#[]) 这很方便,但它的简洁也使它变得不灵活. 如果将步骤分开,则提供默认值会容易得多: def increment_session_counter session[:counter] = session.fetch(:counter,0) + 1 end (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容
- 为什么我不能在C#中创建一个object = bool?
- c# – 从整数模型绑定TimeSpan
- flex与javascript互相通信:使用ExternalInterface
- flash – 有人可以发布一个形成良好的crossdomain.xml示例吗
- 华为交换机端口模式之间的区别(access、trunk、hybrid)
- ToDoList-An effective and flexible way to keep on top o
- machine learning(2) OpenCV训练分类器制作xml文档
- 如何对包含c中的double值的字符串强制执行精度
- 04_NoSQL数据库之Redis数据库:set类型和zset类型
- Hazelcast.xml 配置文件说明