Discussion in 'Ruby' started by Prateek Agarwal, Jul 25, 2009.

1. ### Prateek AgarwalGuest

Prateek Agarwal, Jul 25, 2009

2. ### Guest

On Sat, Jul 25, 2009 at 4:02 PM, Prateek Agarwal<> wrote:
> I had to make a program to estimate the value of pi using Ramanujan's
> method.
>
> I have made the program but it is giving the following error
>
> Question1.rb:8:in 'factorial':Interrupt
>
> where 'factorial' is the name of the method and Question1.rb is the file
> name.

Try this snippet, do you see the problem here?

i = 0
loop {
i += 1
if (i == k) then
return i
else
p i, k
end
sleep 1
}
end

k = gets

, Jul 25, 2009

3. ### Brian CandlerGuest

Prateek Agarwal wrote:
> I had to make a program to estimate the value of pi using Ramanujan's
> method.
>
> I have made the program but it is giving the following error
>
> Question1.rb:8:in 'factorial':Interrupt

You pressed ctrl-C?

I'm surprised it even ran at all:

def factorial(x)
if (x==0) then
return (1)
end
else
... something else

This doesn't make sense syntactically - an 'else' without an 'if'. You
need:

if x == 0
return 1
else
... something else
end
--
Posted via http://www.ruby-forum.com/.

Brian Candler, Jul 26, 2009
4. ### Guest

On Sat, Jul 25, 2009 at 7:24 PM, Brian Candler<> wrote:
> I'm surprised it even ran at all:
>
> def factorial(x)
> =A0if (x=3D=3D0) then
> =A0 =A0return (1)
> =A0 =A0end
> =A0 =A0else
> =A0 =A0 =A0... something else
>
> This doesn't make sense syntactically - an 'else' without an 'if'.

An 'else' can live inside a method or a begin...end:

> ruby y

y:6: warning: else without rescue is useless
FOO
ELSE
FOO
y:3:in `foo': FOO (RuntimeError)
from y:9

> cat y

def foo(n)
puts "FOO"
raise "FOO" if n
rescue
puts "RESCUE"
else
puts "ELSE"
end

foo(false)
foo(true)
> ruby y

FOO
ELSE
FOO
RESCUE

http://rubycentral.com/pickaxe/tut_exceptions.html
"The else clause is a similar, although less useful, construct. If
present, it goes after the rescue clauses and before any ensure. The
body of an else clause is executed only if no exceptions are raised by
the main body of code."

, Jul 26, 2009
5. ### Brian CandlerGuest

Ugh, thanks - I'd forgotten the use of 'else' as part of a rescue, and
the implicit begin/end around a method body.

>> ruby y

> y:6: warning: else without rescue is useless

Matz send years ago that he regretted not making -w the default.
--
Posted via http://www.ruby-forum.com/.

Brian Candler, Jul 26, 2009