diff --git a/struct.c b/struct.c index 273c719aec..f4ae094f00 100644 --- a/struct.c +++ b/struct.c @@ -944,6 +944,33 @@ rb_struct_to_h(VALUE s) return h; } +static VALUE +rb_struct_deconstruct_keys(VALUE s, VALUE keys) +{ + VALUE h; + long i; + + if (NIL_P(keys)) { + return rb_struct_to_h(s); + } + if (UNLIKELY(!RB_TYPE_P(keys, T_ARRAY))) { + rb_raise(rb_eTypeError, + "wrong argument type %"PRIsVALUE" (expected Array or nil)", + rb_obj_class(keys)); + + } + h = rb_hash_new_with_size(RARRAY_LEN(keys)); + for (i=0; i