Ruby中的集合编写指南

2019-09-25 09:39:34于海丽

    在使用 fetch 时,使用第二个参数设置默认值而不是使用自定义的逻辑。

  batman = { name: 'Bruce Wayne', is_evil: false }

  # bad - if we just use || operator with falsy value we won't get the expected result
  batman[:is_evil] || true # => true

  # good - fetch work correctly with falsy values
  batman.fetch(:is_evil, true) # => false

    尽量用 fetch 加区块而不是直接设定默认值。

  batman = { name: 'Bruce Wayne' }

  # bad - if we use the default value, we eager evaluate it
  # so it can slow the program down if done multiple times
  batman.fetch(:powers, get_batman_powers) # get_batman_powers is an expensive call

  # good - blocks are lazy evaluated, so only triggered in case of KeyError exception
  batman.fetch(:powers) { get_batman_powers }

    当你需要从一个 hash 连续的取回一系列的值的时候使用 Hash#values_at。

  # bad
  email = data['email']
  nickname = data['nickname']

  # good
  email, username = data.values_at('email', 'nickname')

    记住, 在 Ruby1.9 中, 哈希的表现不再是无序的. (译者注: Ruby1.9 将会记住元素插入的序列)

    当遍历一个集合的同时, 不要修改这个集合。