我不确定我想在什么情况下使用Hash#fetch
over Hash#[]
。是否有一个常见的场景可以很好地使用它?
问问题
2731 次
3 回答
25
三个主要用途:
当该值是强制性的,即没有默认值时:
options.fetch(:repeat).times{...}
您也会收到一条很好的错误消息:
key not found: :repeat
当值可以是
nil
orfalse
并且默认值是其他值时:if (doit = options.fetch(:repeat, 1)) doit.times{...} else # options[:repeat] is set to nil or false, do something else maybe end
当您不想使用哈希的
default
/时:default_proc
options = Hash.new(42) options[:foo] || :default # => 42 options.fetch(:foo, :default) # => :default
于 2013-01-30T01:43:49.887 回答
6
当您想获取默认值或在键不存在时引发错误时,fetch
很有用。仍然可以fetch
通过将默认值设置为哈希fetch
来做到这一点,但是使用 ,您可以在现场完成。
于 2013-01-30T01:27:48.703 回答
0
但是,您可以这样做:
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]
但不是 fetch:
arr.fetch(0) = "A" #=> unexpected '=', expecting end-of-input
于 2017-05-04T23:26:02.283 回答