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.

其他不同点:

  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 的功能相同





原文地址:https://www.cnblogs.com/FBsharl/p/10531972.html