默认值与合并
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 反馈 — 无需本地设置。