hi,
I am trying to use some dynamic features of ruby.
Inside my module, I try to add some method dynamicaly but I get an error
when I am trying to.
module Rubyhaviour
def add(object)
name = "@" + object.class.downcase
if self.instance_variable_get(name)
self.instance_variable_get(name) << object
else
self.instance_variable_set(name, Array.new)
self.instance_variable_get(name) << object
define_method(name) do
instance_variable_get("@#{name}")
end
end
end
end
undefined method `define_method' for #<Test:0x2ce631c> (NoMethodError)
···
--
Posted via http://www.ruby-forum.com/ .
MR Damien wrote:
hi,
I am trying to use some dynamic features of ruby.
Inside my module, I try to add some method dynamicaly but I get an error
when I am trying to.
module Rubyhaviour
def add(object)
name = "@" + object.class.downcase
if self.instance_variable_get(name)
self.instance_variable_get(name) << object
else
self.instance_variable_set(name, Array.new)
self.instance_variable_get(name) << object
define_method(name) do
instance_variable_get("@#{name}")
end
end
end
end
undefined method `define_method' for #<Test:0x2ce631c> (NoMethodError)
I pushed enter too fast, here are the missing code
class Test
include Rubyhaviour
end
test = test.add(some_object)
Then I get "undefined method `define_method' for #<Test:0x2ce631c>
(NoMethodError)"
···
--
Posted via http://www.ruby-forum.com/\ .
MR Damien wrote:
hi,
I am trying to use some dynamic features of ruby.
Inside my module, I try to add some method dynamicaly but I get an error
when I am trying to.
module Rubyhaviour
def add(object)
name = "@" + object.class.downcase
if self.instance_variable_get(name)
self.instance_variable_get(name) << object
else
self.instance_variable_set(name, Array.new)
self.instance_variable_get(name) << object
define_method(name) do
instance_variable_get("@#{name}")
end
end
end
end
undefined method `define_method' for #<Test:0x2ce631c> (NoMethodError)
Try working in the singleton class:
class C
def foo
class << self
define_method :bar do puts "BAR"; end
end
end
end
c = C.new
c.foo
c.bar
···
--
vjoel : Joel VanderWerf : path berkeley edu : 510 665 3407
Joel VanderWerf wrote:
MR Damien wrote:
def add(object)
end
end
end
end
undefined method `define_method' for #<Test:0x2ce631c> (NoMethodError)
Try working in the singleton class:
class C
def foo
class << self
define_method :bar do puts "BAR"; end
end
end
end
c = C.new
c.foo
c.bar
Hi,
seems not to work neither
···
------------------
def add(object)
name = "@" + self.collection_name_for(object)
if self.instance_variable_get(name)
self.instance_variable_get(name) << object
else
self.instance_variable_set(name, Array.new)
self.instance_variable_get(name) << object
class << self
define_method(name) do
instance_variable_get("@#{name}")
end
end
end
end
------------------
in `define_method': interning empty string (ArgumentError)
--
Posted via http://www.ruby-forum.com/\ .
Hi --
Joel VanderWerf wrote:
MR Damien wrote:
def add(object)
end
end
end
end
undefined method `define_method' for #<Test:0x2ce631c> (NoMethodError)
Try working in the singleton class:
class C
def foo
class << self
define_method :bar do puts "BAR"; end
end
end
end
c = C.new
c.foo
c.bar
Hi,
seems not to work neither
------------------
def add(object)
name = "@" + self.collection_name_for(object)
if self.instance_variable_get(name)
self.instance_variable_get(name) << object
else
self.instance_variable_set(name, Array.new)
self.instance_variable_get(name) << object
class << self
define_method(name) do
instance_variable_get("@#{name}")
end
end
end
end
------------------
in `define_method': interning empty string (ArgumentError)
That's because name is not in scope inside the class definition body
(class << self). In order to keep name in scope, you need to use
class_eval on the singleton class. That way, you're operating inside a
code block, which does share the local variables.
(class << self; self; end).class_eval do
define_method(name) do
etc.
David
···
On Mon, 20 Oct 2008, MR Damien wrote:
--
Rails training from David A. Black and Ruby Power and Light:
Intro to Ruby on Rails January 12-15 Fort Lauderdale, FL
Advancing with Rails January 19-22 Fort Lauderdale, FL *
* Co-taught with Patrick Ewing!
See http://www.rubypal.com for details and updates!
Robert_K1
(Robert K.)
20 October 2008 11:42
6
Also, watch closely the contents of "name" and how you (OP) use it.
robert
···
2008/10/20 David A. Black <dblack@rubypal.com>:
Hi --
On Mon, 20 Oct 2008, MR Damien wrote:
Joel VanderWerf wrote:
MR Damien wrote:
def add(object)
end
end
end
end
undefined method `define_method' for #<Test:0x2ce631c> (NoMethodError)
Try working in the singleton class:
class C
def foo
class << self
define_method :bar do puts "BAR"; end
end
end
end
c = C.new
c.foo
c.bar
Hi,
seems not to work neither
------------------
def add(object)
name = "@" + self.collection_name_for(object)
if self.instance_variable_get(name)
self.instance_variable_get(name) << object
else
self.instance_variable_set(name, Array.new)
self.instance_variable_get(name) << object
class << self
define_method(name) do
instance_variable_get("@#{name}")
end
end
end
end
------------------
in `define_method': interning empty string (ArgumentError)
That's because name is not in scope inside the class definition body
(class << self). In order to keep name in scope, you need to use
class_eval on the singleton class. That way, you're operating inside a
code block, which does share the local variables.
(class << self; self; end).class_eval do
define_method(name) do
--
remember.guy do |as, often| as.you_can - without end
Thanks for you answers, I will check that.
···
--
Posted via http://www.ruby-forum.com/ .