mirror of
https://github.com/ruby/ruby.git
synced 2022-11-09 12:17:21 -05:00
* array.c: Improve and fix documentation for Array#dig
[#11776] * hash.c: ditto * struct.c: ditto * test_hash.rb: Add basic test for user defined `dig`. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@52941 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
parent
1fadd43881
commit
cb3b463a50
4 changed files with 22 additions and 8 deletions
9
array.c
9
array.c
|
@ -5535,13 +5535,16 @@ rb_ary_any_p(VALUE ary)
|
|||
* call-seq:
|
||||
* ary.dig(idx, ...) -> object
|
||||
*
|
||||
* Extracts the nested array value specified by the sequence of <i>idx</i>
|
||||
* objects.
|
||||
* Extracts the nested value specified by the sequence of <i>idx</i>
|
||||
* objects by calling +dig+ at each step, returning +nil+ if any
|
||||
* intermediate step is +nil+.
|
||||
*
|
||||
* a = [[1, [2, 3]]]
|
||||
*
|
||||
* a.dig(0, 1, 1) #=> 3
|
||||
* a.dig(0, 0, 0) #=> nil
|
||||
* a.dig(1, 2, 3) #=> nil
|
||||
* a.dig(0, 0, 0) #=> NoMethodError, undefined method `dig' for 1:Fixnum
|
||||
* [42, {foo: :bar}].dig(1, :foo) #=> :bar
|
||||
*/
|
||||
|
||||
VALUE
|
||||
|
|
10
hash.c
10
hash.c
|
@ -2695,13 +2695,17 @@ rb_hash_any_p(VALUE hash)
|
|||
* call-seq:
|
||||
* hsh.dig(key, ...) -> object
|
||||
*
|
||||
* Extracts the nested hash value specified by the sequence of <i>key</i>
|
||||
* objects.
|
||||
* Extracts the nested value specified by the sequence of <i>idx</i>
|
||||
* objects by calling +dig+ at each step, returning +nil+ if any
|
||||
* intermediate step is +nil+.
|
||||
*
|
||||
* h = { foo: {bar: {baz: 1}}}
|
||||
*
|
||||
* h.dig(:foo, :bar, :baz) #=> 1
|
||||
* h.dig(:foo, :zot) #=> nil
|
||||
* h.dig(:foo, :zot, :xyz) #=> nil
|
||||
*
|
||||
* g = { foo: [10, 11, 12] }
|
||||
* g.dig(:foo, 1) #=> 11
|
||||
*/
|
||||
|
||||
VALUE
|
||||
|
|
5
struct.c
5
struct.c
|
@ -1130,8 +1130,9 @@ rb_struct_size(VALUE s)
|
|||
* call-seq:
|
||||
* struct.dig(key, ...) -> object
|
||||
*
|
||||
* Extracts the nested struct value specified by the sequence of <i>key</i>
|
||||
* objects.
|
||||
* Extracts the nested value specified by the sequence of <i>idx</i>
|
||||
* objects by calling +dig+ at each step, returning +nil+ if any
|
||||
* intermediate step is +nil+.
|
||||
*
|
||||
* klass = Struct.new(:a)
|
||||
* o = klass.new(klass.new({b: [1, 2, 3]}))
|
||||
|
|
|
@ -1306,6 +1306,12 @@ class TestHash < Test::Unit::TestCase
|
|||
h = @cls[a: @cls[b: [1, 2, 3]], c: 4]
|
||||
assert_equal(1, h.dig(:a, :b, 0))
|
||||
assert_nil(h.dig(:c, 1))
|
||||
o = Object.new
|
||||
def o.dig(*args)
|
||||
{dug: args}
|
||||
end
|
||||
h[:d] = o
|
||||
assert_equal({dug: [:foo, :bar]}, h.dig(:d, :foo, :bar))
|
||||
end
|
||||
|
||||
def test_cmp
|
||||
|
|
Loading…
Reference in a new issue