Newbie question: how to create variable

Hi,

how to create variable in the method that accepts string as name of the
variable and the object?

Something like this:

class InterpreterCallback
def set_object(name, value)
#do something here
end
end

$callback = InterpreterCallback.new()
$callback.set_object(“var”, 3)

puts var

Karel M. wrote:

Hi,

how to create variable in the method that accepts string as name of the variable and the object?

Something like this:

class InterpreterCallback
def set_object(name, value)
#do something here

instance_variable_set("@#{name}", value)

end

end

$callback = InterpreterCallback.new()
$callback.set_object(“var”, 3)

puts var

3

Alternatively you can use an OpenStruct.

Kind regards

robert

On Aug 11, 2006, at 12:55 PM, Robert K. wrote:

$callback = InterpreterCallback.new()
$callback.set_object(“var”, 3)
puts var

3

Depending on what you’re trying to do, you might be able to use a
simple eval statement:
irb(main):001:0> name=“var”
=> “var”
irb(main):002:0> value=“3”
=> “3”
irb(main):003:0> eval “#{name} = value”
=> “3”
irb(main):004:0> var
=> “3”

Hi –

On Sat, 12 Aug 2006, Mr Pinto wrote:

end
irb(main):002:0> value=“3”
=> “3”
irb(main):003:0> eval “#{name} = value”
=> “3”
irb(main):004:0> var
=> “3”

That only works in irb. With ruby you’ll get:

ruby -e ‘name=“var”; value=“3”; eval("#{name}=#{value}"); var’
-e:1: undefined local variable or method `var’ for main:Object
(NameError)

David

end
irb(main):002:0> value=“3”
(NameError)

David

None of this actually works quite well for me. I am using SWIG directors
to embed ruby (and python, perl) into C# application trough C++ layer.
value actually wraps C++ object . InterpreterCallback actually extends
c++ class and I am calling set_object() from C++ - set_object(“editor”,
getEditor() ) - “editor” then can be used in the global namespace for
scripting convenience:

editor.DrawGrid

I actually get it working with

def set_object(var, value)
  eval("def #{var}; $#{var}; end; proc{|_v| $#{var} = _v}", 

TOPLEVEL_BINDING).call(value)
end

but it goes through global variable. I believe there is simpler way how
to do this.
Kind regards,
Karel

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