Simple program with a simple(?) error -- what's wrong?

Hi,

I put together to exercise simple Ruby constructs. It's posted at
http://www.pastie.org/237288.

Before I introduced the "indx" variable it worked fine. The statement
incrementing indx in the def causes the error:
undefined method `+' for nil:NilClass (NoMethodError)

I'm running:
ruby 1.8.6 (2007-09-24 patchlevel 111) [i386-mswin32]

Why doesn't the def use the instance of indx defined before the def?

Thanks in Advance,
Richard

The scope of indx is wrong, when you call it outside the function, it is
only accesible witin that scope, the outer scope and so you have you do this

def foo
    indx=0
....
end

that will then work, you only need to call foo someplace if you want foo to
run. You only define it, creating the function does not call it.

···

On Sat, Jul 19, 2008 at 10:39 PM, RichardOnRails < RichardDummyMailbox58407@uscomputergurus.com> wrote:

Hi,

I put together to exercise simple Ruby constructs. It's posted at
http://www.pastie.org/237288\.

Before I introduced the "indx" variable it worked fine. The statement
incrementing indx in the def causes the error:
undefined method `+' for nil:NilClass (NoMethodError)

I'm running:
ruby 1.8.6 (2007-09-24 patchlevel 111) [i386-mswin32]

Why doesn't the def use the instance of indx defined before the def?

Thanks in Advance,
Richard

reuben doetsch wrote:

The scope of indx is wrong, when you call it outside the function, it is
only accesible witin that scope, the outer scope and so you have you do
this

def foo
    indx=0
....
end

(...)
Or replace "indx" with "@indx".
Regards,
Siep

···

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

Thanks Reuben and Siep for you responses.

The following worked perfectly for creating sequentially numbered
lines: as "def" was invoked successively with various arguments:

@indx=0
def disp(s)
    @index += 1
    printf( [snip]

However, "index=0" inside the def, despite subsequent incrementing,
had the dual faults of assigning the same index to every line and
being inaccessible outside the "def".

I had also tried "if !defined?(indx)" somehow, but that was useless
across multiple invocations of "def".

Again, thanks to you both for your responses.

···

On Jul 20, 4:35 pm, Siep Korteling <s.kortel...@gmail.com> wrote:

reuben doetsch wrote:
> The scope of indx is wrong, when you call it outside the function, it is
> only accesible witin that scope, the outer scope and so you have you do
> this

> def foo
> indx=0
> ....
> end

(...)
Or replace "indx" with "@indx".
Regards,
Siep

--
Posted viahttp://www.ruby-forum.com/.