Forum: Ruby JRuby problem

Announcement (2017-05-07): www.ruby-forum.com is now read-only since I unfortunately do not have the time to support and maintain the forum any more. Please see rubyonrails.org/community and ruby-lang.org/en/community for other Rails- und Ruby-related community platforms.
Ahmed A. (Guest)
on 2009-04-22 19:45
Hi,...

I'm trying to execute the following lines:

ScriptContext sct = jruby.getContext();
jruby.eval("sheet = Spreadsheet.new", sct);
jruby.eval("sheet.cells.a1 = 'Welcome'", sct);

The first two lines are executed correctly, but the last one gives the
following error:
undefined local variable or method `sheet' for main:Object

it indicates that sheet is undefined although it's defined in line 2.

When I try to execute both commands in a single statement like:
 jruby.eval("sheet = Spreadsheet.new \n sheet.cells.a1 = 'Welcome'",
sct);

The statement is executed correctly.

Please help

Regards,...

Ahmed
James H. (Guest)
on 2009-04-22 20:09
(Received via mailing list)
My guess is that the context fails to keep track of local variables. Try
an
experiment with something simpler:

ScriptContext sct = jruby.getContext
jruby.eval("name = 'Ahmed'")
jruby.eval('puts "My name is #{name}"')

If things explode, my theory is correct.

James

PS: Semi-colons aren't required, nor are empty parenthesis. It's
considered
out of the Ruby norm to use them. As such, I'd avoid them in your
coding.
See http://www.pathf.com/blogs/ruby-and-rails-style-guide/
Ahmed A. (Guest)
on 2009-04-22 20:15
James H. wrote:
> My guess is that the context fails to keep track of local variables. Try
> an
> experiment with something simpler:
>
> ScriptContext sct = jruby.getContext
> jruby.eval("name = 'Ahmed'")
> jruby.eval('puts "My name is #{name}"')
>
> If things explode, my theory is correct.
>
> James
>
> PS: Semi-colons aren't required, nor are empty parenthesis. It's
> considered
> out of the Ruby norm to use them. As such, I'd avoid them in your
> coding.
> See http://www.pathf.com/blogs/ruby-and-rails-style-guide/

Thanks for response. the code you sent is missing using sct, but I
updated it:
ScriptContext sct = jruby.getContext();
        jruby.eval("name = 'Ahmed'", sct);
        jruby.eval("puts \"My name is #{name}\"", sct);

also not working, the same error: undefined local variable or method
`name' for main:Object

PS: Semi-colon is required by java code
Ahmed A. (Guest)
on 2009-04-22 20:35
Ahmed A. wrote:
> James H. wrote:
>> My guess is that the context fails to keep track of local variables. Try
>> an
>> experiment with something simpler:
>>
>> ScriptContext sct = jruby.getContext
>> jruby.eval("name = 'Ahmed'")
>> jruby.eval('puts "My name is #{name}"')
>>
>> If things explode, my theory is correct.
>>
>> James
>>
>> PS: Semi-colons aren't required, nor are empty parenthesis. It's
>> considered
>> out of the Ruby norm to use them. As such, I'd avoid them in your
>> coding.
>> See http://www.pathf.com/blogs/ruby-and-rails-style-guide/
>
> Thanks for response. the code you sent is missing using sct, but I
> updated it:
> ScriptContext sct = jruby.getContext();
>         jruby.eval("name = 'Ahmed'", sct);
>         jruby.eval("puts \"My name is #{name}\"", sct);
>
> also not working, the same error: undefined local variable or method
> `name' for main:Object
>
> PS: Semi-colon is required by java code

I found a solution for the problem, it's a discussed bug:
Take a look: markmail.org/message/ze4vwkscc6w3cpc7
and http://jira.codehaus.org/browse/JRUBY-371

A temporary solution is to add $ before variable name so that it's seen
in the same context with successive eval commands
This topic is locked and can not be replied to.