前言

这一章节介绍了 Ruby 中 hash 这一数据类型的用法和特征.

Hash 的定义

与 array 的对比

最大的不同:

An array can only use integers as indexes, but a hash can use any object as a key.

其他不同点:

  1. array 用 [] 包括起来, hash 用 { } 包括起来.(但是 specify 的时候都是通过 [[)
  2. 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 的对比

不同之处:

  1. 对于 parameter 来说, arguments 必须 in exactly the right order; 对于 hash 来说,这不是必要的
  2. 对于 parameter 来说, required parameters have to appear before optional parameters, 对于 hash 来说, 你可以 skip 任何一个 key that you want.
  3. 对于 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 的功能相同

最新文章

  1. 带你实现开发者头条APP(四)---首页优化(加入design包)
  2. 如何从本地导入.nupkg文件
  3. js实现无限极分类
  4. Atitit.eclipse 4.3 4.4  4.5 4.6新特性
  5. jqMobile中的dialog和popup的区别
  6. javaweb 乱码---汉字存入mysql数据库中变成乱码
  7. JAVA常见错误处理方法 和 JVM内存结构
  8. Swift 3 新特性
  9. QTableView表格视图的列宽设置
  10. CKEditor在线编辑器增加一个自定义插件
  11. WPF中三种方法得到当前屏幕的宽和高
  12. 'Service' object has no attribute 'process'
  13. 10、Cocos2dx 3.0游戏开发找小三之容器篇:Vector、Map、Value
  14. getopt vs getopts
  15. 6月10日-IOS应用-日记本
  16. 论林耐斯-Linux系统的重要性
  17. [转载] Cassandra入门 框架模型 总结
  18. Linux基础之常用命令整理(一)
  19. A direct formulation for sparse PCA using semidefinite programming
  20. Servlet的cookie使用,500报错,tomcat和cookie语法不兼容解决

热门文章

  1. python简说(八)random
  2. Installing Jenkins as a Windows service
  3. scrapy - Request 中的回调函数不执行
  4. Python3基础 response.info 服务器返回的header信息
  5. html 之 区块元素属性(待补充)
  6. nginx 配置静态文件
  7. (zhuan) Using convolutional neural nets to detect facial keypoints tutorial
  8. [RabbitMQ学习笔记] - 初识RabbitMQ
  9. oogle advertiser api开发概述——速率限制
  10. URAL 1004 Sightseeing Trip(floyd求最小环+路径输出)