[lnkForumImage]
TotalShareware - Download Free Software

Confronta i prezzi di migliaia di prodotti.
Asp Forum
 Home | Login | Register | Search 


 

Forums >

comp.lang.ruby

including a namespace for just one class

S. Robert James

12/25/2006 5:18:00 PM

I would like to reference constants and classes defined in module
People in the class Schedule.

class Login is not part of any module (other than the root).

doing this:
class Schedule
include People
def a_method
# Worker.new won't work
People::Worker.new # works
end
end

doesn't work.

Is there a way to include the module People so that I don't need to
prefix People:: for only one particular class?

Also, why doesn't what I tried work? Doesn't include copy in the
constants, and aren't classes just constants?

5 Answers

Morton Goldberg

12/25/2006 7:44:00 PM

0

On Dec 25, 2006, at 12:20 PM, S. Robert James wrote:

> I would like to reference constants and classes defined in module
> People in the class Schedule.
>
> class Login is not part of any module (other than the root).
>
> doing this:
> class Schedule
> include People
> def a_method
> # Worker.new won't work
> People::Worker.new # works
> end
> end
>
> Is there a way to include the module People so that I don't need to
> prefix People:: for only one particular class?

I don't know why it doesn't work for you -- it works fine for me.

<code>
module People
class Worker
end
end

class Schedule
include People
def a_method
p Worker.new
end
end

Schedule.new.a_method
</code>

<results>
#<People::Worker:0x88494>
</results>

Regards, Morton

Gavin Kistner

12/25/2006 8:18:00 PM

0

On Dec 25, 2006, at 12:20 PM, S. Robert James wrote:
> I would like to reference constants and classes defined in module
> People in the class Schedule.

Here's an example that works fine for me:
module People
POPULATION = 1234567
end

class Schedule
include People
def x
p POPULATION
end
end

s = Schedule.new
s.x
#=> 1234567

p VERSION
#=> "1.8.5"

S. Robert James

12/25/2006 9:27:00 PM

0

Is it possible that Rails changes things somehow?
I think I know - the autoloader can't find them then!

Phrogz wrote:
> On Dec 25, 2006, at 12:20 PM, S. Robert James wrote:
> > I would like to reference constants and classes defined in module
> > People in the class Schedule.
>
> Here's an example that works fine for me:
> module People
> POPULATION = 1234567
> end
>
> class Schedule
> include People
> def x
> p POPULATION
> end
> end
>
> s = Schedule.new
> s.x
> #=> 1234567
>
> p VERSION
> #=> "1.8.5"

S. Robert James

12/25/2006 10:15:00 PM

0


S. Robert James wrote:
> Is it possible that Rails changes things somehow?
> I think I know - the autoloader can't find them then!

Does that make any sense? The autoloader can find them if I include
People in the global namespace, but not if I include it in the class?!
If so, is there a workaround?

Logan Capaldo

12/28/2006 5:21:00 AM

0

On Tue, Dec 26, 2006 at 07:15:04AM +0900, S. Robert James wrote:
>
> S. Robert James wrote:
> > Is it possible that Rails changes things somehow?
> > I think I know - the autoloader can't find them then!
>
> Does that make any sense? The autoloader can find them if I include
> People in the global namespace, but not if I include it in the class?!
> If so, is there a workaround?
>
Yes it makes sense and you are probably right. The workaround is to
explicitly require the file

e.g:
require 'people' # Or whatever the file is