[Ruby] eval question

Ali Rizvi aliabbasrizvi at gmail.com
Mon Apr 30 14:27:16 PDT 2007


On 4/30/07, Ali Rizvi <aliabbasrizvi at gmail.com> wrote:
>
>
>
> On 4/30/07, Aaron Patterson <aaron at tenderlovemaking.com> wrote:
> >
> > My brain may be dead today, so hopefully the community can help.  :-(
> >
> > In this code, 'easy_lover' is defined, but for some reason
> > 'phil_collins' is not.  First, why is that?  Second, can I make it so?
> > You can have Easy Lover without Phil!
> >
> >   eval(<<END
> >     phil_collins = 'awesome'
> >     def easy_lover
> >       "She'll get a hold on you believe it"
> >     end
> >   END
> >   )
> >
> >   puts easy_lover
> >   puts phil_collins # Error!
>
>
> Just as I suspected you have a scoping problem.
>
> Your variable (phil_collins) is limited in scope within the eval while
> your method is in the main/kernel scope which lives on after the eval while
> variable seizes to exist beyond that scope.
>
> The following would work:
>
>   eval(<<END
>     phil_collins = 'awesome'
>     def easy_lover
>       "She'll get a hold on you believe it"
>     end
>     puts phil_collins
>   END
>   )
>   puts easy_lover
>

Or your other option is to make phil_collins an attribute (of class Kernel)

eval(<<END
    @phil_collins = 'awesome'
    def easy_lover
        "She'll get a hold on you believe it"
    end
END
)

puts easy_lover
puts @phil_collins # No Error

which is not recommended instead create your own class but I am not sure of
what problem you are solving

Hope this helps.
> Ali
>
> > --
> > Aaron Patterson
> > http://tenderlovemaking.com/
> > _______________________________________________
> > Ruby at zenspider.com - Seattle.rb non-commercial list
> > http://www.zenspider.com/seattle.rb
> > http://www.zenspider.com/mailman/listinfo/ruby
> >
>
>


More information about the Ruby mailing list