I've got something like:
@var = 'brown'
class Foo < ActiveRecord::Base
set_table_name @var
end
However, as the code is right now, I'm not able to access @var from
within the class definition. Can someone tell me how I can accomplish
this?
I've got something like:
@var = 'brown'
class Foo < ActiveRecord::Base
set_table_name @var
end
However, as the code is right now, I'm not able to access @var from
within the class definition. Can someone tell me how I can accomplish
this?
Maybe you want to use global instead instance variable here:
* eggman2001 <sodani@gmail.com> [2009-05-27 12:07:18 +0900]:
I've got something like:
@var = 'brown'
$var = 'brown'
class Foo < ActiveRecord::Base
set_table_name @var
set_table_name $var
-Jan
end
However, as the code is right now, I'm not able to access @var from
within the class definition. Can someone tell me how I can accomplish
this?
--
jan=callcc{|jan|jan};jan.call(jan)
eggman2001 wrote:
I've got something like:
@var = 'brown'
class Foo < ActiveRecord::Base
set_table_name @var
endHowever, as the code is right now, I'm not able to access @var from
within the class definition. Can someone tell me how I can accomplish
this?
Of course you can't see @var from within the class definition if you set
it outside. Remember that @variables are instance variables, and are
scoped to the class definition.
If you can explain where you're trying to set @var, perhaps we can come
up with an alternative approach.
Best,
--
Marnen Laibow-Koser
http://www.marnen.org
marnen@marnen.org
--
Posted via http://www.ruby-forum.com/\.
You can do it using eval like this:
@var = 'brown'
class Foo
p eval('@var',TOPLEVEL_BINDING)
end
Regards,
Park Heesob
2009/5/27 eggman2001 <sodani@gmail.com>:
I've got something like:
@var = 'brown'
class Foo < ActiveRecord::Base
set_table_name @var
endHowever, as the code is right now, I'm not able to access @var from
within the class definition. Can someone tell me how I can accomplish
this?
eggman2001 wrote:
I've got something like:
@var = 'brown'
This is an instance variable of the top-level (main) object.
class Foo < ActiveRecord::Base
set_table_name @var
end
Now you're inside class Foo, @var is an instance variable of the Foo
class object (sometimes called a "class instance variable", but it's
just an instance variable like any other)
However, as the code is right now, I'm not able to access @var from
within the class definition. Can someone tell me how I can accomplish
this?
(1) Horrible:
class Foo < ActiveRecord::Base
set_table_name eval("@var", TOPLEVEL_BINDING)
end
(2) Much better to use a local variable:
var = 'brown'
Foo.set_table_name var
That should work unless set_table_name is a private method. If it is,
then:
(3)
var = 'brown'
Foo.class_eval { set_table_name var }
You see that local variables propagate happily into blocks. It's only
'class' and 'def' which start with a clean slate as far as local
variables are concerned.
--
Posted via http://www.ruby-forum.com/\.
This helps a lot. Guess I should brush up on my variable types
On May 27, 4:42 am, Brian Candler <b.cand...@pobox.com> wrote:
eggman2001 wrote:
> I've got something like:> @var = 'brown'
This is an instance variable of the top-level (main) object.
> class Foo < ActiveRecord::Base
> set_table_name @var
> endNow you're inside class Foo, @var is an instance variable of the Foo
class object (sometimes called a "class instance variable", but it's
just an instance variable like any other)> However, as the code is right now, I'm not able to access @var from
> within the class definition. Can someone tell me how I can accomplish
> this?(1) Horrible:
class Foo < ActiveRecord::Base
set_table_name eval("@var", TOPLEVEL_BINDING)
end(2) Much better to use a local variable:
var = 'brown'
Foo.set_table_name varThat should work unless set_table_name is a private method. If it is,
then:(3)
var = 'brown'
Foo.class_eval { set_table_name var }You see that local variables propagate happily into blocks. It's only
'class' and 'def' which start with a clean slate as far as local
variables are concerned.
--
Posted viahttp://www.ruby-forum.com/.