HeadFIrst Ruby 第七章总结 hashes
前言
这一章节介绍了 Ruby 中 hash 这一数据类型的用法和特征.
Hash 的定义
与 array 的对比
最大的不同:
An array can only use integers as indexes, but a hash can use any object as a key.
其他不同点:
- array 用 [] 包括起来, hash 用 { } 包括起来.(但是 specify 的时候都是通过 [[)
- array 查找某一个元素需要遍历, hash 查找一个元素是通过 key 的
Hash return "nil" by default
解释: 在 specify 的时候,如果键不存在,那么返回的值为 nil.
Ruby 中的 nil
在 Ruby 中,与其他语言不同, nil and only nil is "falsy"
解决办法
格式: votes = Hash.new(0)
功能:通过 create a new hash with a default object of "0" 的方式,当我们想要 access 一个不存在的 key 所对应的 value 的时候,默认返回值为 0.
Hash 的 each 方法
格式:
votes.each do |name, count|
puts "#{name} : #{count}"
end
注意:
与 array 中的 each 方法的功能相同,但是需要两个参数.
Hash 作为 method 的 parameter
method 调用普通 parameter 与 hash 的对比
不同之处:
- 对于 parameter 来说, arguments 必须 in exactly the right order; 对于 hash 来说,这不是必要的
- 对于 parameter 来说, required parameters have to appear before optional parameters, 对于 hash 来说, 你可以 skip 任何一个 key that you want.
- 对于 parameter 来说,很难区别参数之间, 对于 hash 来说,可以通过 key 来得知 value 代表了什么
Hash 的简化
简化方式一: Leave off the braces
在调用 method 的时候,可以去掉 "{ }"
格式:
candidate = Candidate.new("Carl Barnes", :age => 49, :occupation => "Attorney")
简化方式二: Leave out the arrows
在输入 Hash 的时候, 可以用 key: value 的格式
Required keyword arguments
格式:
def initialize(name, age: nil, occupation: nil, hobby: nil, birthplace: "Sleepy Creek")
功能:
Hash 作为 method 的参数的时候, 如果存在 typo 的时候,Ruby 不会报错,因此是一种 silent failures, 可以通过 required keyword 来避免.
与一般 parameter 的区别
如果在 : 后面没有值,它和一般的 parameter 功能相同
如果在 : 后面有值,它和 parameter = default value 的功能相同
HeadFIrst Ruby 第七章总结 hashes的更多相关文章
- HeadFirst Ruby 第七章总结 references
前言 这一章的内容关于 references,讲了当 Ruby 程序中可能会遇到关于 reference 与 object 之间概念混淆而导致的问题. 导言 本章从一个 astronomer 发现 s ...
- HeadFIrst Ruby 第六章总结 block return values
前言 这一章通过抽取一个文件中的确定的单词的项目进行讲解,主要包括了: File 的打开.阅读与关闭 find_all & refuse方法的相关内容 map 方法的相关内容这章的核心是:关于 ...
- HeadFIrst Ruby 第二章总结 methods and classes
HeadFIrst Ruby 第二章总结 methods and classes 前言 这一章讲了如何创建自己的 class,并且讲了在用 class 创建 object 的两个要素: instanc ...
- <自动化测试方案_7>第七章、PC端UI自动化测试
第七章.PC端UI自动化测试 UI自动化测试又分为:Web自动化测试,App自动化测试.微信小程序.微信公众号UI层的自动化测试工具非常多,比较主流的是UFT(QTP),Robot Framework ...
- 精通Web Analytics 2.0 (9) 第七章:失败更快:爆发测试与实验的能量
精通Web Analytics 2.0 : 用户中心科学与在线统计艺术 第七章:失败更快:爆发测试与实验的能量 欢迎来到实验和测试这个棒极了的世界! 如果Web拥有一个超越所有其他渠道的巨大优势,它就 ...
- 《Entity Framework 6 Recipes》中文翻译系列 (38) ------ 第七章 使用对象服务之动态创建连接字符串和从数据库读取模型
翻译的初衷以及为什么选择<Entity Framework 6 Recipes>来学习,请看本系列开篇 第七章 使用对象服务 本章篇幅适中,对真实应用中的常见问题提供了切实可行的解决方案. ...
- 《Entity Framework 6 Recipes》中文翻译系列 (41) ------ 第七章 使用对象服务之标识关系中使用依赖实体与异步查询保存
翻译的初衷以及为什么选择<Entity Framework 6 Recipes>来学习,请看本系列开篇 7-7 标识关系中使用依赖实体 问题 你想在标识关系中插入,更新和删除一个依赖实体 ...
- Java语言程序设计(基础篇) 第七章 一维数组
第七章 一维数组 7.2 数组的基础知识 1.一旦数组被创建,它的大小是固定的.使用一个数组引用变量,通过下标来访问数组中的元素. 2.数组是用来存储数据的集合,但是,通常我们会发现把数组看作一个存储 ...
- objective-c第七章课后练习2
题:改变第七章例子中print方法,增加bool参数,判断如果是YES则对分数进行约简 @interface Fraction : NSObject { //int num,den; } @prope ...
随机推荐
- php 操作 mysql 数据库常用方法集合
参考: https://www.runoob.com/php/php-pdo.html https://www.cnblogs.com/feng18/p/6523646.html https://bl ...
- ODAC(V9.5.15) 学习笔记(八)TOraScript
名称 类型 说明 DataSet 如果脚本中返回了数据结果,则通过该数据集进行获取 Delimiter string 脚本语句之间的分隔符 EndLine Integer 脚本中最后一行的行号 End ...
- Bootstrap3基础 btn-group-vertical 按钮组(横着、竖着排列)
内容 参数 OS Windows 10 x64 browser Firefox 65.0.2 framework Bootstrap 3.3.7 editor ...
- Linux电源管理_autosleep--(五)【转】
本文转载自:https://blog.csdn.net/wlsfling/article/details/46005409 1. 前言 Autosleep也是从Android wakelocks补丁集 ...
- CentOS 安装 Gitlab
源地址 https://mirror.tuna.tsinghua.edu.cn/gitlab-ce/ # 清华源 https://mirrors.tuna.tsinghua.edu.cn/help/g ...
- 集训DAYn——组合数学(1)
组合 又到了我们信息老师讲数学课了,吼吼吼 然后数学老师中途探望了一下,哇塞塞,然后他看到黑板上的题,微妙的笑了. 排列: 从n个数中有序的选出m个数的方案数是多少?第一个数有n种取法,第二个数有n- ...
- 振兴中华|2013年蓝桥杯A组题解析第三题-fishers
标题: 振兴中华 小明参加了学校的趣味运动会,其中的一个项目是:跳格子. 地上画着一些格子,每个格子里写一个字,如下所示:(也可参见p1.jpg) 从我做起振 我做起振兴 做起振兴中 起振兴中华 比赛 ...
- java 安装环境 疑问(1)
java安装时有看到javaEE的 sdk 和 javaSE的jdk,这一点查一下资料,一般时安装jdk就好了
- CF981D Bookshelves
按位贪心+DP的好题qwq 首先看到题目的要求,统计价值的时候的操作是按位与,就要有按位分别计算的意识 开始没意识到结果想了好久还是看了题解才想到 由于统计价值的方式不是加和,所以可能会出现两个较大的 ...
- 洛谷P1244 青蛙过河 DP/思路
又是一道奇奇怪怪的DP(其实是思路题). 原文戳>>https://www.luogu.org/problem/show?pid=1244<< 这题的意思给的挺模糊,需要一定的 ...