使用`散列#的好处fetch`过`散列#[]`(Benefits of using `Hash#fe

2019-08-08 19:19发布

我不知道在什么情况下,我想用Hash#fetchHash#[] 有没有在这将是很好地利用一种常见的情形?

Answer 1:

三个,主要用途:

  1. 当该值是强制性的,即不存在默认:

     options.fetch(:repeat).times{...} 

    你得到一个不错的错误信息太:

     key not found: :repeat 
  2. 当值可以是nilfalse ,默认是别的东西:

     if (doit = options.fetch(:repeat, 1)) doit.times{...} else # options[:repeat] is set to nil or false, do something else maybe end 
  3. 当你不想使用default / default_proc散列:

     options = Hash.new(42) options[:foo] || :default # => 42 options.fetch(:foo, :default) # => :default 


Answer 2:

如果你想获得一个默认值或提高时,键不存在,错误fetch是非常有用的。 它仍然是可以这样做,而不fetch由默认值设定为哈希,但使用fetch ,你可以做到这一点当场。



Answer 3:

但是,你可以这样做:

arr = [1,2,3]
arr[1..-2] #=> [1,2]

但不是这样的:

arr.fetch(1..-2) #=> TypeError: no implicit conversion of Range into Integer

类似地,可以发生变异与阵列Hash#[]

arr[0] = "A"
arr #=> ["A",2,3]

但不能与获取:

arr.fetch(0) = "A" #=> unexpected '=', expecting end-of-input


文章来源: Benefits of using `Hash#fetch` over `Hash#[]`
标签: ruby hash