JRuby problem

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

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/

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. 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 forum is not affiliated to the Ruby language, Ruby on Rails framework, nor any Ruby applications discussed here.

| Privacy Policy | Terms of Service | Remote Ruby Jobs