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





posted @   FBshark  阅读(157)  评论(0编辑  收藏  举报
编辑推荐:
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具
点击右上角即可分享
微信分享提示