0Pricing
Ruby Academy · 课时

默认值与合并

fetch、merge、dig

默认值与合并 是 CoddyKit 上的免费 Ruby Academy 课时。 这是第 4 节课,共 4 节。 你可以在下方免费阅读本课时的完整内容 — 然后在浏览器中使用内置代码编辑器和全天候 AI 导师进行实践。 这是 Ruby Academy 学习路径的一部分,你的进度在网页和 CoddyKit 应用中同步。 Ruby Academy 课程共包含 4 节课。

nil 带来的问题

读取缺失键会返回 nil,这可能在数学运算或逻辑判断中造成意外结果。Ruby 提供了更安全的方式来处理缺失情况。

h = { a: 1 }
puts h[:b].inspect

使用 fetch 安全访问

fetch 会返回值;如果键缺失,则抛出清晰的错误。需要确保键存在时,请使用它。

h = { name: "Ada" }
puts h.fetch(:name)

使用默认值调用 fetch

将第二个参数传给 fetch,作为仅在键缺失时使用的备用值。

h = { name: "Ada" }
puts h.fetch(:age, 0)
puts h.fetch(:name, "Unknown")

使用代码块调用 fetch

传入代码块可以延迟计算备用值。只有查找失败时,代码块才会运行。

h = {}
puts h.fetch(:x) { "computed default" }

带默认值的哈希

Hash.new(default) 会为任何缺失键返回默认值,而不是 nil。默认值会被共享,因此对于简单的不可变值,使用这种方式更合适。

counts = Hash.new(0)
counts[:a] += 1
counts[:a] += 1
puts counts[:a]
puts counts[:b]

使用代码块设置默认值

Hash.new { |hash, key| ... } 会为每个键计算一个新的默认值,非常适合将内容分组到数组中。

groups = Hash.new { |h, k| h[k] = [] }
groups[:fruit] << "apple"
groups[:fruit] << "pear"
puts groups[:fruit].inspect

使用默认值计数

将默认值设为 0,可以简单而清晰地统计单词数量。

words = ["a", "b", "a", "a"]
count = Hash.new(0)
words.each { |w| count[w] += 1 }
puts count

合并哈希

merge 会将两个哈希合并为一个新哈希。发生冲突时,第二个哈希中的键优先。

defaults = { color: "red", size: "M" }
user = { color: "blue" }
puts defaults.merge(user)

使用代码块合并

向 merge 传入代码块可以解决冲突,例如将值相加。

a = { x: 1, y: 2 }
b = { y: 3, z: 4 }
puts a.merge(b) { |key, old, new| old + new }

使用 dig 安全访问嵌套数据

dig 可以安全地读取嵌套哈希中的数据。如果任意层级缺失,则返回 nil,而不会导致程序崩溃。

data = { user: { address: { city: "London" } } }
puts data.dig(:user, :address, :city)
puts data.dig(:user, :phone, :home).inspect

组合使用这些工具

将默认值和合并结合使用,可以根据基础值和覆盖值构建配置。

base = { retries: 3, timeout: 30 }
options = base.merge(timeout: 60)
puts options.fetch(:timeout)

快速检查

请检查您对默认值和合并操作的掌握情况。

回顾

现在您可以优雅地处理缺失数据:

  • 使用带默认值、代码块或严格错误处理的 fetch
  • 使用 Hash.new(0) 和代码块默认值进行计数和分组
  • 使用带冲突处理代码块的 merge
  • 使用 dig 安全访问嵌套数据

下一门课程:范围和可枚举对象。

c = Hash.new(0)
c[:hits] += 1
puts c[:hits]

常见问题解答

「默认值与合并」课时是免费的吗?

是的 — 「默认值与合并」的完整文本可在网页上免费阅读。要进行交互式练习(内置代码编辑器和全天候 AI 导师)并解锁 Ruby Academy 课程的其余内容,请升级到 CoddyKit PRO。 Ruby Academy 课程共包含 4 节课。

「默认值与合并」这节课中我会学到什么?

fetch、merge、dig 你通过在浏览器中直接运行的动手代码来练习 Ruby Academy,全天候 AI 导师会在你学习这节课的过程中回答你的问题。

学习 Ruby Academy 需要有经验吗?

无需任何先前经验。CoddyKit 上的 Ruby Academy 课程适合初学者到高级学习者,你可以从这里开始或从头开始,按照自己的节奏学习。 这是第 4 节课,共 4 节。

「默认值与合并」课时需要多长时间?

大多数 CoddyKit 课程大约需要 5–10 分钟。每节课都很精短且互动,所以你能稳步进步,并在网页和应用中从离开的地方继续。

我能在这节 Ruby Academy 课中编写并运行代码吗?

能。每节 Ruby Academy 课都包含内置代码编辑器,你可以在浏览器中直接编写并运行真实代码,并获得即时 AI 反馈 — 无需本地设置。

此课程中的所有课时

  1. 符号与字符串
  2. 创建与读取哈希
  3. 遍历哈希
  4. 默认值与合并
← 返回 Ruby Academy