Velocity Reviews - Computer Hardware Reviews

Velocity Reviews > Newsgroups > Programming > Ruby > Newbie: if / elseif

Reply
Thread Tools

Newbie: if / elseif

 
 
planetthoughtful
Guest
Posts: n/a
 
      03-14-2007
Hi All,

I'm a little confused about why the following two pieces of code seem
to behave differently:

if $val =~ /this/i
puts "this"
elseif $val =~ /that/i
puts "that"
elseif $val =~ /the other/i
puts "the other"
end

if $val contains "this is the other value", for some reason "the
other" is not put by the last elseif statement. However, the following
code works as expected:

if $val =~ /this/i
puts "this"
end
if $val =~ /that/i
puts "that"
end
if $val =~ /the other/i
puts "the other"
end

Am I missing something about if / elseif in ruby?

Any help appreciated!

pt

 
Reply With Quote
 
 
 
 
planetthoughtful
Guest
Posts: n/a
 
      03-15-2007
On Mar 15, 9:59 am, "planetthoughtful" <(E-Mail Removed)>
wrote:

> Am I missing something about if / elseif in ruby?


Obviously I was missing something - the correct syntax. I'm now aware
that the syntax should be "elsif" rather than "elseif".

Thanks all,

pt

 
Reply With Quote
 
 
 
 
7stud 7stud
Guest
Posts: n/a
 
      03-15-2007
planetthoughtful wrote:
> On Mar 15, 9:59 am, "planetthoughtful" <(E-Mail Removed)>
> wrote:
>
>> Am I missing something about if / elseif in ruby?

>
> Obviously I was missing something - the correct syntax. I'm now aware
> that the syntax should be "elsif" rather than "elseif".
>
> Thanks all,
>
> pt


You're not the only one. I wasn't quite so generous:

http://www.ruby-forum.com/topic/100350#new


--
Posted via http://www.ruby-forum.com/.

 
Reply With Quote
 
Augie De Blieck Jr.
Guest
Posts: n/a
 
      03-15-2007
> if $val =~ /this/i
> puts "this"
> elseif $val =~ /that/i
> puts "that"
> elseif $val =~ /the other/i
> puts "the other"
> end


Just remember that even when you spell it right, it's going to drop
out of the whole construct just as soon as it fulfills a RegEx. After
it prints "this," it stops looking at any of the other "elsif"
statements.

That short circuiting is a feature. =)

-Augie

 
Reply With Quote
 
Chad Perrin
Guest
Posts: n/a
 
      03-15-2007
On Thu, Mar 15, 2007 at 12:12:17PM +0900, Augie De Blieck Jr. wrote:
> >if $val =~ /this/i
> > puts "this"
> >elseif $val =~ /that/i
> > puts "that"
> >elseif $val =~ /the other/i
> > puts "the other"
> >end

>
> Just remember that even when you spell it right, it's going to drop
> out of the whole construct just as soon as it fulfills a RegEx. After
> it prints "this," it stops looking at any of the other "elsif"
> statements.
>
> That short circuiting is a feature. =)


Indeed -- that's the whole point of using elsif rather than just a list
of separate if statements. The if/elsif/else construct is used for
mutually exclusive flow control, where only one of several is to be
executed. Using a series of if statements considers each in a vacuum,
in order, while if/elsif/else considers them all as part of a greater
whole.

--
CCD CopyWrite Chad Perrin [ http://ccd.apotheon.org ]
"Real ugliness is not harsh-looking syntax, but having to
build programs out of the wrong concepts." - Paul Graham

 
Reply With Quote
 
planetthoughtful
Guest
Posts: n/a
 
      03-15-2007
On Mar 15, 1:12 pm, "Augie De Blieck Jr." <(E-Mail Removed)> wrote:
> > if $val =~ /this/i
> > puts "this"
> > elseif $val =~ /that/i
> > puts "that"
> > elseif $val =~ /the other/i
> > puts "the other"
> > end

>
> Just remember that even when you spell it right, it's going to drop
> out of the whole construct just as soon as it fulfills a RegEx. After
> it prints "this," it stops looking at any of the other "elsif"
> statements.


Yes, that was the behaviour I was looking for. I noticed I provided an
ambiguous example in that in another construct it would possibly have
matched two different conditions. However, in my actual script I am
looking for values that are mutually exclusive, so exiting on finding
a value is fine.

All the best,

pt

 
Reply With Quote
 
John Joyce
Guest
Posts: n/a
 
      03-15-2007
So it doesn't work like the C variety?

if ( condition )
statement // maybe done
else if ( condition )
statement // or maybe done
else
statement // done if the 1st and 2nd are not done


Honestly, my biggest difficulties so far are that I think of code
somewhere between C and PHP (I like to call it a nicer C)
On Mar 15, 2007, at 12:20 PM, Chad Perrin wrote:

> On Thu, Mar 15, 2007 at 12:12:17PM +0900, Augie De Blieck Jr. wrote:
>>> if $val =~ /this/i
>>> puts "this"
>>> elseif $val =~ /that/i
>>> puts "that"
>>> elseif $val =~ /the other/i
>>> puts "the other"
>>> end

>>
>> Just remember that even when you spell it right, it's going to drop
>> out of the whole construct just as soon as it fulfills a RegEx.
>> After
>> it prints "this," it stops looking at any of the other "elsif"
>> statements.
>>
>> That short circuiting is a feature. =)

>
> Indeed -- that's the whole point of using elsif rather than just a
> list
> of separate if statements. The if/elsif/else construct is used for
> mutually exclusive flow control, where only one of several is to be
> executed. Using a series of if statements considers each in a vacuum,
> in order, while if/elsif/else considers them all as part of a greater
> whole.
>
> --
> CCD CopyWrite Chad Perrin [ http://ccd.apotheon.org ]
> "Real ugliness is not harsh-looking syntax, but having to
> build programs out of the wrong concepts." - Paul Graham
>



 
Reply With Quote
 
Chad Perrin
Guest
Posts: n/a
 
      03-15-2007
On Thu, Mar 15, 2007 at 02:41:53PM +0900, John Joyce wrote:
> So it doesn't work like the C variety?
>
> if ( condition )
> statement // maybe done
> else if ( condition )
> statement // or maybe done
> else
> statement // done if the 1st and 2nd are not done


Err . . . I'm pretty sure if, elsif, else works exactly like the C if,
else if, else.

--
CCD CopyWrite Chad Perrin [ http://ccd.apotheon.org ]
"The first rule of magic is simple. Don't waste your time waving your
hands and hopping when a rock or a club will do." - McCloctnick the Lucid

 
Reply With Quote
 
Phrogz
Guest
Posts: n/a
 
      03-16-2007
On Mar 14, 5:59 pm, "planetthoughtful" <(E-Mail Removed)>
wrote:
> I'm a little confused about why the following two pieces of code seem
> to behave differently:
>
> if $val =~ /this/i
> puts "this"
> elseif $val =~ /that/i
> puts "that"
> elseif $val =~ /the other/i
> puts "the other"
> end


Thought I'd point out that Ruby's case statement is more powerful than
many other languages' switch statements:

%w| pthisic thatch mother armadillo |.each{ |val|
case val
when /this/i
puts "'#{val}' contains 'this'"
when /that/i
puts "'#{val}' contains 'that'"
when /other/i
puts "'#{val}' contains 'other'"
else
puts "'#{val}' does not contain 'this', 'that', or 'other'"
end
}

#=> 'pthisic' contains 'this'
#=> 'thatch' contains 'that'
#=> 'mother' contains 'other'
#=> 'armadillo' does not contain 'this', 'that', or 'other'


Also, note (as seen above) that the regexp you supplied as example
match substrings even inside words. Just in case you wanted exact case-
insenstive string matching, perhaps /\Athis\Z/i would be more
appropriate. If you wanted exact word matching, perhaps /\bthis\b/i
might be what you want.

 
Reply With Quote
 
David A. Black
Guest
Posts: n/a
 
      03-16-2007
Hi --

On 3/15/07, Chad Perrin <(E-Mail Removed)> wrote:
> On Thu, Mar 15, 2007 at 02:41:53PM +0900, John Joyce wrote:
> > So it doesn't work like the C variety?
> >
> > if ( condition )
> > statement // maybe done
> > else if ( condition )
> > statement // or maybe done
> > else
> > statement // done if the 1st and 2nd are not done

>
> Err . . . I'm pretty sure if, elsif, else works exactly like the C if,
> else if, else.


Pretty much, except in Ruby there's no need for a rule to resolve
if/else ambiguity, because 'end' always makes it clear.


David

--
Q. What is THE Ruby book for Rails developers?
A. RUBY FOR RAILS by David A. Black (http://www.manning.com/black)
(See what readers are saying! http://www.rubypal.com/r4rrevs.pdf)
Q. Where can I get Ruby/Rails on-site training, consulting, coaching?
A. Ruby Power and Light, LLC (http://www.rubypal.com)

 
Reply With Quote
 
 
 
Reply

Thread Tools

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off
Trackbacks are On
Pingbacks are On
Refbacks are Off


Similar Threads
Thread Thread Starter Forum Replies Last Post
Does the last elseif run or not? fl VHDL 6 02-28-2013 10:28 AM
elseif v. elsif ?? 7stud 7stud Ruby 83 03-13-2007 02:58 PM
elseif problem simonced Ruby 7 06-03-2006 07:50 PM
ElseIF or Case Statement? Leon ASP .Net 5 12-17-2004 05:33 PM



Advertisments