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 的功能相同
最新文章
- 带你实现开发者头条APP(四)---首页优化(加入design包)
- 如何从本地导入.nupkg文件
- js实现无限极分类
- Atitit.eclipse 4.3 4.4  4.5 4.6新特性
- jqMobile中的dialog和popup的区别
- javaweb 乱码---汉字存入mysql数据库中变成乱码
- JAVA常见错误处理方法 和 JVM内存结构
- Swift 3 新特性
- QTableView表格视图的列宽设置
- CKEditor在线编辑器增加一个自定义插件
- WPF中三种方法得到当前屏幕的宽和高
- 'Service' object has no attribute 'process'
- 10、Cocos2dx 3.0游戏开发找小三之容器篇:Vector、Map、Value
- getopt vs getopts
- 6月10日-IOS应用-日记本
- 论林耐斯-Linux系统的重要性
- [转载] Cassandra入门 框架模型 总结
- Linux基础之常用命令整理(一)
- A direct formulation for sparse PCA using semidefinite programming
- Servlet的cookie使用,500报错,tomcat和cookie语法不兼容解决
热门文章
- python简说(八)random
- Installing Jenkins as a Windows service
- scrapy - Request 中的回调函数不执行
- Python3基础 response.info 服务器返回的header信息
- html 之 区块元素属性(待补充)
- nginx 配置静态文件
- (zhuan) Using convolutional neural nets to detect facial keypoints tutorial
- [RabbitMQ学习笔记] - 初识RabbitMQ
- oogle advertiser api开发概述——速率限制
- URAL 1004 Sightseeing Trip(floyd求最小环+路径输出)