From: Andrew Wagner on 7 Jul 2010 09:01 [Note: parts of this message were removed to make it a legal post.] Ok, granted that I'm pretty new to ruby, but this seems odd to me: irb(main):001:0> x = [1,2,3] => [1, 2, 3] irb(main):002:0> x.delete 2 => 2 irb(main):003:0> x => [1, 3] With this behavior, wouldn't "delete!" be a more appropriate name?
From: Rob Biedenharn on 7 Jul 2010 09:25 On Jul 7, 2010, at 9:01 AM, Andrew Wagner wrote: > Ok, granted that I'm pretty new to ruby, but this seems odd to me: > > irb(main):001:0> x = [1,2,3] > => [1, 2, 3] > irb(main):002:0> x.delete 2 > => 2 > irb(main):003:0> x > => [1, 3] > > With this behavior, wouldn't "delete!" be a more appropriate name? Read http://dablog.rubypal.com/2007/8/15/bang-methods-or-danger-will-rubyist Is there some kind of interpretation of "delete" that doesn't imply the receiving object will be changed? Compare Hash#update and Hash#merge, for example. Hash#update changes the receiving hash, which Hash#merge creates a new hash with extra/ overwritten keys from the argument hash. It shouldn't be too surprising that Hash#merge! is an alias of Hash#update. -Rob Rob Biedenharn Rob(a)AgileConsultingLLC.com http://AgileConsultingLLC.com/ rab(a)GaslightSoftware.com http://GaslightSoftware.com/
From: Andrew Wagner on 7 Jul 2010 09:40 [Note: parts of this message were removed to make it a legal post.] That article is helpful, thanks. Somehow I had exactly that idea in my mind, that the ! implies side effects. I was expecting to get back a new array [1, 3], and that there would be a delete! method defined with the below behavior. That seems more consistent to me than some vague description that ! means "dangerous" for some value of "dangerous". I guess I still have plenty to learn. Thanks for the link! On Wed, Jul 7, 2010 at 9:25 AM, Rob Biedenharn <Rob(a)agileconsultingllc.com>wrote: > > On Jul 7, 2010, at 9:01 AM, Andrew Wagner wrote: > > Ok, granted that I'm pretty new to ruby, but this seems odd to me: >> >> irb(main):001:0> x = [1,2,3] >> => [1, 2, 3] >> irb(main):002:0> x.delete 2 >> => 2 >> irb(main):003:0> x >> => [1, 3] >> >> With this behavior, wouldn't "delete!" be a more appropriate name? >> > > > > Read > http://dablog.rubypal.com/2007/8/15/bang-methods-or-danger-will-rubyist > > Is there some kind of interpretation of "delete" that doesn't imply the > receiving object will be changed? > > Compare Hash#update and Hash#merge, for example. Hash#update changes the > receiving hash, which Hash#merge creates a new hash with extra/overwritten > keys from the argument hash. It shouldn't be too surprising that > Hash#merge! is an alias of Hash#update. > > -Rob > > Rob Biedenharn > Rob(a)AgileConsultingLLC.com http://AgileConsultingLLC.com/ > rab(a)GaslightSoftware.com http://GaslightSoftware.com/ > > >
From: Josh Cheek on 7 Jul 2010 09:43 [Note: parts of this message were removed to make it a legal post.] On Wed, Jul 7, 2010 at 8:25 AM, Rob Biedenharn <Rob(a)agileconsultingllc.com>wrote: > > On Jul 7, 2010, at 9:01 AM, Andrew Wagner wrote: > > Ok, granted that I'm pretty new to ruby, but this seems odd to me: >> >> irb(main):001:0> x = [1,2,3] >> => [1, 2, 3] >> irb(main):002:0> x.delete 2 >> => 2 >> irb(main):003:0> x >> => [1, 3] >> >> With this behavior, wouldn't "delete!" be a more appropriate name? >> > > > > Read > http://dablog.rubypal.com/2007/8/15/bang-methods-or-danger-will-rubyist > > Is there some kind of interpretation of "delete" that doesn't imply the > receiving object will be changed? > > x = "123" x.delete '2' # => "13" x # => "123"
From: Johnathon Wright on 9 Jul 2010 10:49 On Jul 7, 8:01 am, Andrew Wagner <wagner.and...(a)gmail.com> wrote: > With this behavior, wouldn't "delete!" be a more appropriate name? On Jul 7, 8:25 am, Rob Biedenharn <R...(a)AgileConsultingLLC.com> wrote: > Is there some kind of interpretation of "delete" that doesn't imply > the receiving object will be changed? After some reflection, I can certainly see how you would expect a bang! there... when working with sets, you often want to manipulate a set to form a different one. guests = ['joe(a)person.test', 'jane(a)person.test', 'jules(a)person.test', 'me'] invitations_to_send = guests.delete('me') and in fact there are enumerable operators that work that way... guest_emails = ['joe(a)person.test', 'jane(a)person.test', 'jules(a)person.test', 'me'] guests = guest_emails.map{|email| Person.find_by_email( email ) } whereas guest_emails.map!{|email| Person.find_by_email( email ) } So, yes, inconsistent. Sorry, not much that can be done now... :) The way to do this would be ... invitations_to_send = guests - ['me'] or just overwrite delete for your app... :) jw ---------- Johnathon Wright Web Application Consultant http://www.mustmodify.com/
|
Pages: 1 Prev: Global method usage in standard libs Next: Ruby 1.9 Old School $LOAD_PATH |