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

Discussion in 'Ruby' started by RichardOnRails, Jul 20, 2008.

  1. 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
    RichardOnRails, Jul 20, 2008
    #1
    1. Advertising

  2. [Note: parts of this message were removed to make it a legal post.]

    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 <
    > 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, Jul 20, 2008
    #2
    1. Advertising

  3. 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/.
    Siep Korteling, Jul 20, 2008
    #3
  4. On Jul 20, 4:35 pm, Siep Korteling <> 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/.


    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.
    RichardOnRails, Jul 21, 2008
    #4
    1. Advertising

Want to reply to this thread or ask your own question?

It takes just 2 minutes to sign up (and it's free!). Just click the sign up button to choose a username and then you can ask your own questions on the forum.
Similar Threads
  1. Matthew
    Replies:
    7
    Views:
    654
    Priscilla Walmsley
    Jan 7, 2005
  2. Replies:
    10
    Views:
    549
    Dennis Lee Bieber
    Aug 15, 2006
  3. Replies:
    14
    Views:
    528
    Karl Heinz Buchegger
    Nov 2, 2005
  4. Replies:
    2
    Views:
    574
  5. chanson
    Replies:
    2
    Views:
    604
    jeppe
    Oct 9, 2009
Loading...

Share This Page