From: John Joyce Date: 2007-07-13T16:34:33+09:00 Subject: Re: gets On Jul 13, 2007, at 2:03 AM, Robert Klemme wrote: > 2007/7/13, Chad Perrin : >> On Fri, Jul 13, 2007 at 03:24:30PM +0900, Robert Klemme wrote: >> > 2007/7/13, Jeffrey Bowen : >> > >Of course the code below will not work because gets is >> > >adding /n to the entry. I know that chomp will remove >> > >the /n but is there away to cut the /n without >> > >reassigning test1 to another variable IE test2 = >> > >test1.comp >> > >> > Use chomp! >> > >> > >print "test1 " >> > >test1 = gets >> > >puts test1.class >> > >if test1 == "1" >> > > puts "step 1" >> > >else >> > > puts "step 2" >> > >end >> >> That was the first thing that occurred to me, too, but I think >> that Chris >> Carter's solution is (usually) the better option. In-place >> modification >> can lead to some difficult-to-track bugs when working with complex >> code, >> and can also be problematic for concurrency -- so I try to stay in >> the >> habit of avoiding in-place modifications. > > You're over cautious here. Your concerns do not apply because test1 is > a local variable and this bit of code is far from complex. Also, > chomp! is more efficient. If you need to make sure that an object does > not change you can use #freeze and be sure to immediately detect bugs > (i.e. unwanted modifications). > > Apart from that, every Array append operation is an inplace > modification. Changing an object's state is at the core of OO > programming - so avoiding it is not realistic. > > If you follow your thought consequently to the end you should switch > to a pure functional language because that is free of side effects. > > Kind regards > > robert > this is definitely a case where the usual action people take is variable_name = gets.chomp The only time you would not do that, is if you actually want/need the \n character for something. You can always add it back later very easily if you need it. variable_name += '\n' This concatenates it to the stored string. (technically it takes the result of concatenating the string in variable_name with the immediate string value of the newline character and then assigns the result to the original variable. chomp is one of those good ideas that came from perl because it's so often needed. John Joyce