Feature #13211
closedHash#delete taking a splat
Description
Hi there,
I would like to add the ability for Hash#delete to take a splat of arguments that would delete entries at each of the given keys. I've run into this quite a few times where it would be useful in application code. Something like
def preprocess(args = {})
do_some_preprocessing(%i[a b c].zip(args.delete(:a, :b, :c)).to_h)
process(args)
end
Would be very happy to work on a patch for this if it's desired.
Files
Updated by sawa (Tsuyoshi Sawada) about 7 years ago
Whether to accept a splat (perhaps on an array) at the beginning of an argument is not something to be specified as a method signature.
Your real issue is to let the method accept an arbitrary number of arguments.
Whether you pass the method an array with a splat or you directly pass multiple arguments is solely up to how you use the method in the particular context.
Updated by kddnewton (Kevin Newton) about 7 years ago
Okay, yes, an arbitrary number of arguments. Is this something to which people would be amenable?
Updated by shyouhei (Shyouhei Urabe) almost 7 years ago
We looked at this issue in yesterday's developer meeting.
While extending Hash#delete is still a valid feature request, it seems to us that the OP wants something different; the example code shows that what is actually wanted is to split a hash into two. That is doable with Hash#delete, but not that intuitive or declarative.
You might want to request such feature instead.
Updated by kddnewton (Kevin Newton) almost 7 years ago
I've attached a patch of what I'm talking about, which should hopefully be more clear. The idea is that you could delete multiple values from a hash at once, which is valuable in its own right. Additionally, the return value is changed to be an array if multiple arguments are passed, representing the deleted values.
This is my first time contributing and I'm not sure if I'm doing everything right, so please any feedback is welcome.
Updated by kddnewton (Kevin Newton) 7 months ago
- Status changed from Open to Closed