[lnkForumImage]
TotalShareware - Download Free Software

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


 

Forums >

comp.lang.ruby

including general variables in modules

Mario Ruiz

3/12/2008 3:49:00 PM

I'm trying to create different scenarios so I thought to do something
like:

file:scenarios.rb
------------------
module Scenarios
module Default
$bab="defaultmodulevalue"
end
module DefaultHidden
$bab="hiddenmodulevalue"
end
module DefaultSecond
$bab="secondmodulevalue"
end
end

file:mytest.rb
---------------
require 'scenarios.rb'
include Scenarios::Default
...
puts $bab

--------------

but it doesn't matter which module I include I always have the same
respond:
"secondmodulevalue"

Any ideas for resolving this?

Thanks.
--
Posted via http://www.ruby-....

13 Answers

Rob Biedenharn

3/12/2008 4:12:00 PM

0

On Mar 12, 2008, at 11:49 AM, Mario Ruiz wrote:

> I'm trying to create different scenarios so I thought to do something
> like:
>
> file:scenarios.rb
> ------------------
> module Scenarios
> module Default
> $bab="defaultmodulevalue"
> end
> module DefaultHidden
> $bab="hiddenmodulevalue"
> end
> module DefaultSecond
> $bab="secondmodulevalue"
> end
> end
>
> file:mytest.rb
> ---------------
> require 'scenarios.rb'
> include Scenarios::Default
> ...
> puts $bab
>
> --------------
>
> but it doesn't matter which module I include I always have the same
> respond:
> "secondmodulevalue"
>
> Any ideas for resolving this?
>
> Thanks.


Uh, stop using global variables?

-Rob

Rob Biedenharn http://agileconsult...
Rob@AgileConsultingLLC.com



Mario Ruiz

3/12/2008 4:17:00 PM

0

But I need it. :(

Rob Biedenharn wrote:
> On Mar 12, 2008, at 11:49 AM, Mario Ruiz wrote:
>
>> $bab="hiddenmodulevalue"
>> ...
>> Thanks.
> Uh, stop using global variables?
>
> -Rob
>
> Rob Biedenharn http://agileconsult...
> Rob@AgileConsultingLLC.com

--
Posted via http://www.ruby-....

Rob Biedenharn

3/12/2008 4:39:00 PM

0

On Mar 12, 2008, at 12:17 PM, Mario Ruiz wrote:
> But I need it. :(
>
> Rob Biedenharn wrote:
>> On Mar 12, 2008, at 11:49 AM, Mario Ruiz wrote:
>>
>>> $bab="hiddenmodulevalue"
>>> ...
>>> Thanks.
>> Uh, stop using global variables?
>>
>> -Rob



Do you really?

Perhaps you can describe your "need" and get a better answer, but why
not something like:

==> scenarios.rb <==
module Scenarios
module Default
def bab; "defaultmodulevalue"; end
end
module DefaultHidden
def bab; "hiddenmodulevalue"; end
end
module DefaultSecond
def bab; "secondmodulevalue"; end
end
end
__END__

==> these.rb <==
require 'scenarios'
class ThisOne
include Scenarios::Default
end

class ThatOne
include Scenarios::DefaultSecond
end

puts "ThisOne has #{ThisOne.new.bab}"
puts "ThatOne has #{ThatOne.new.bab}"
__END__


-Rob

Rob Biedenharn http://agileconsult...
Rob@AgileConsultingLLC.com



Mario Ruiz

3/12/2008 5:17:00 PM

0

so it's impossible to do it whithout declaring a method...
--
Posted via http://www.ruby-....

Rob Biedenharn

3/12/2008 6:39:00 PM

0

On Mar 12, 2008, at 1:17 PM, Mario Ruiz wrote:

> so it's impossible to do it whithout declaring a method...

You still haven't defined what "it" really is. Perhaps with a better
description of what you're hoping to accomplish you could get a better
answer or hint.

-Rob

Rob Biedenharn http://agileconsult...
Rob@AgileConsultingLLC.com


Christopher Dicely

3/13/2008 2:08:00 AM

0

On Wed, Mar 12, 2008 at 10:17 AM, Mario Ruiz <mario@betware.com> wrote:
> so it's impossible to do it whithout declaring a method...

That depends what you want, which isn't clear. If you don't need to change the
values (and even if you do, since the constant-ness of Ruby constants isn't
enforced, though using them when you don't want something constant is
usually bad design), you can do without methods:

file:scenarios.rb
------------------
module Scenarios
module Default
BAB ="defaultmodulevalue"
end
module DefaultHidden
BAB ="hiddenmodulevalue"
end
module DefaultSecond
BAB ="secondmodulevalue"
end
end

file:mytest.rb
---------------
require 'scenarios.rb'
include Scenarios::Default
...
puts BAB

--------------

Mario Ruiz

3/13/2008 9:53:00 AM

0

Actually what I want is to include an scenario with all my global
variables and if I want another scenario I can include it and all the
global variables will change.
module Scenarios
module MyFirstSc
$web="http://www.elmund...
$sqlSearch="select video from datab"
$user="Pep"
$password="xxx"
end
module MySecondSc
$web="http://www.elmund...
$sqlSearch="select audiodefault from datab"
$user="Bee"
$password="2x8"
end
end

In my test cases I'll have in the first line for example:
include Scenarios::MySecondSc
and if I want to change the scenario I only have to change this line:
include Scenarios::MyFirstSc

How can I do it without including an extraline with a method?
I know I could do something like:
module Scenarios
module MyFirstSc
def getValues
$web="http://www.elmund...
$sqlSearch="select video from datab"
$user="Pep"
$password="xxx"
end
end
...
end

and in the first line we'll write:
include Scenarios::MyFirstSc
Scenarios::MyFirstSc.getValues()


But I don't like this way I would like to do it in only one line... is
it possible???

Thanks for your time.
--
Posted via http://www.ruby-....

David A. Black

3/13/2008 11:37:00 AM

0

Hi --

On Thu, 13 Mar 2008, Mario Ruiz wrote:

> Actually what I want is to include an scenario with all my global
> variables and if I want another scenario I can include it and all the
> global variables will change.
> module Scenarios
> module MyFirstSc
> $web="http://www.elmund...
> $sqlSearch="select video from datab"
> $user="Pep"
> $password="xxx"
> end
> module MySecondSc
> $web="http://www.elmund...
> $sqlSearch="select audiodefault from datab"
> $user="Bee"
> $password="2x8"
> end
> end
>
> In my test cases I'll have in the first line for example:
> include Scenarios::MySecondSc
> and if I want to change the scenario I only have to change this line:
> include Scenarios::MyFirstSc
>
> How can I do it without including an extraline with a method?
> I know I could do something like:
> module Scenarios
> module MyFirstSc
> def getValues
> $web="http://www.elmund...
> $sqlSearch="select video from datab"
> $user="Pep"
> $password="xxx"
> end
> end
> ...
> end
>
> and in the first line we'll write:
> include Scenarios::MyFirstSc
> Scenarios::MyFirstSc.getValues()
>
>
> But I don't like this way I would like to do it in only one line... is
> it possible???

See Chris's answer: use constants, and include the module you want.
I've been programming in Ruby for 7.5 years and I have no clear memory
of ever having created a global variable. I imagine I have once or
twice, but it's very, very unlikely that you need to do it or that
it's the best way to do it in this case.


David

--
Upcoming Rails training from David A. Black and Ruby Power and Light:
ADVANCING WITH RAILS, April 14-17 2008, New York City
CORE RAILS, June 24-27 2008, London (Skills Matter)
See http://www.r... for details. Berlin dates coming soon!

no_private_replies

3/13/2008 12:21:00 PM

0

Mario Ruiz <mario@betware.com> wrote:

> n my test cases I'll have in the first line for example:
> include Scenarios::MySecondSc
> and if I want to change the scenario I only have to change this line:
> include Scenarios::MyFirstSc

I think this code will do what you require

module Scenarios

module Default
def self.included(mod)
super(mod)
$bab="defaultmodulevalue"
end
end

module DefaultHidden
def self.included(mod)
super(mod)
$bab="hiddenmodulevalue"
end
end

module DefaultSecond
def self.included(mod)
super(mod)
$bab="secondmodulevalue"
end
end
end

Module#included gets sent automatically by Ruby when you include a
module, so you do not need to invoke it explicitly.
--
Morel

Mario Ruiz

3/13/2008 12:36:00 PM

0

Thanks Morel I think this one could be the solution.
But I have a question for you...
Why do you need super(mod)??

Thanks
--
Posted via http://www.ruby-....