Thursday 15 September 2011

ruby - Why does delete return the deleted element instead of the new array? -



ruby - Why does delete return the deleted element instead of the new array? -

in ruby, array#delete(obj) search , remove specified object array. however, may i'm missing here found returning value --- obj --- quite unusual , little bit useless.

my humble sentiment in consistent methods sort/sort! , map/map! there should 2 methods, e.g. delete/delete!, where

ary.delete(obj) -> new array, obj removed ary.delete!(obj) -> ary (after removing obj ary)

for several reasons, first beingness current delete non-pure, , should warn programmer many other methods in array (in fact entire delete_??? family has issue, quite unsafe methods!), sec beingness returning obj much less chainable returning new array, example, if delete above 1 described, can multiple deletions in 1 statement, or can else after deletion:

ary = [1,2,2,2,3,3,3,4] ary.delete(2).delete(3) #=> [1,4], equivalent "ary - [2,3]" ary.delete(2).map{|x|x**2"} #=> [1,9,9,9,16]

which elegant , easy read.

so guess question is: is deliberate design out of reason, or heritage of language?

if know delete dangerous, there no need add together bang ! farther notice dangerous. why not have it. other methods map may or may not dangerous; why have versions , without bang.

as why returns extracted element, provides access info cumbersome refer if not designed that. original array after modification can referred accessing receiver, extracted element not accessible.

perhaps, might comparing methods add together elements, push or unshift. these methods add together elements irrespective of elements receiver array has, returning added element same argument passed, , know it, not helpful homecoming added elements. therefore, modified array returned, more helpful. delete, whether element extracted depends on whether receiver array has it, , don't know that, useful have homecoming value.

ruby

No comments:

Post a Comment