[#395238] rubygem: ispunity (unite all your internet connections) — Arun Tomar <tomar.arun@...>

Dear friends,

12 messages 2012/05/01

[#395250] Overwriting one Ruby array or arrays with another — Craig Law <lists@...>

Hi

14 messages 2012/05/02

[#395258] array of strings - finding letter combinations — "Sebastjan H." <lists@...>

Hi All,

16 messages 2012/05/02

[#395357] Why Enumerator#next does not return more than one value? — Földes László <lists@...>

If I have an Enumerator which yields elements of a mathematical series

10 messages 2012/05/07

[#395373] How to use Data_Wrap_Struct to assign the DATA VALUE to an exsiting Ruby object? — Iñaki Baz Castillo <ibc@...>

Hi, my code receives an arbitrary klass name (provided by the user)

8 messages 2012/05/07

[#395429] passing via instance variable or regular () — sam jam <lists@...>

def first

10 messages 2012/05/10

[#395463] I'm looking for a Metaprogramming Project — Phil Stone <lists@...>

Hello,

19 messages 2012/05/11

[#395548] A million reasons why Encoding was a mistake — Marc Heiler <lists@...>

Newcomer wants to try Ruby.

15 messages 2012/05/15
[#395561] Re: A million reasons why Encoding was a mistake — Ryan Davis <ryand-ruby@...> 2012/05/15

[#395595] Re: A million reasons why Encoding was a mistake — Brian Candler <lists@...> 2012/05/16

I will add that the OP is not entirely alone in his opinion.

[#395551] How to ensure that a block runs entirely after other threads? (Thread.exclusive does not "work") — Iñaki Baz Castillo <ibc@...>

Hi, I expected that in the following example code, thread t1 would not

8 messages 2012/05/15

[#395575] GUI with ruby on windows — David Acosta <lists@...>

hello friends, i am a begginer and i have a litlle question, how can i

17 messages 2012/05/16

[#395604] what is going wrong here? — roob noob <lists@...>

Notice the initialization of both classes in each of the examples, if

20 messages 2012/05/16

[#395646] rb_gc_register_address() or rb_gc_mark()? — Iñaki Baz Castillo <ibc@...>

Hi, I've bad experiences with rb_gc_register_address(), it does never

16 messages 2012/05/17

[#395686] reading from and writing to a Unicode encoded file — "Sebastjan H." <lists@...>

Hi,

19 messages 2012/05/18
[#395694] Re: reading from and writing to a Unicode encoded file — Regis d'Aubarede <lists@...> 2012/05/18

Hello,

[#395697] Re: reading from and writing to a Unicode encoded file — "Sebastjan H." <lists@...> 2012/05/18

Regis d'Aubarede wrote in post #1061272:

[#395698] Re: reading from and writing to a Unicode encoded file — Regis d'Aubarede <lists@...> 2012/05/18

Sebastjan H. wrote in post #1061276:

[#395699] Re: reading from and writing to a Unicode encoded file — "Sebastjan H." <lists@...> 2012/05/18

Regis d'Aubarede wrote in post #1061277:

[#395750] Re: reading from and writing to a Unicode encoded file - issues when using Shoes — "Sebastjan H." <lists@...> 2012/05/21

Hi,

[#395754] Re: reading from and writing to a Unicode encoded file - issues when using Shoes — "Sebastjan H." <lists@...> 2012/05/21

Sebastjan H. wrote in post #1061483:

[#395740] ? Ruby through CGI and Rails — Shaun Lloyd <list@...>

Hi everybody,

22 messages 2012/05/21
[#395764] Re: Ruby through CGI and Rails — Brian Candler <lists@...> 2012/05/21

Shaun Lloyd wrote in post #1061455:

[#395786] Re: Ruby through CGI and Rails — Shaun Lloyd <list@...> 2012/05/22

On 22/05/12 03:37, Brian Candler wrote:

[#395838] Re: Ruby through CGI and Rails — Brian Candler <lists@...> 2012/05/23

Shaun Lloyd wrote in post #1061602:

[#395787] Changing self class from inside a method?? — David Madison <lists@...>

Let's start off with the assumption I want a method that allows an

10 messages 2012/05/22

[#395841] Memory-efficient set of Fixnums — George Dupre <lists@...>

Hi,

25 messages 2012/05/23

[#395883] looking for a ruby idiom : r=foo; return r if r — botp <botpena@...>

Hi All,

11 messages 2012/05/24

[#395966] Am I justified to use a global variable if it must be used in all scopes? — Phil Stone <lists@...>

Hello,

12 messages 2012/05/27

[#396010] does this leak more than the size of the string via timing side channels — rooby shoez <lists@...>

string1 = "string"

16 messages 2012/05/29

[#396038] Is it possible to avoid longjmp in exceptions, Thread#kill, exit(), signals? — Iñaki Baz Castillo <ibc@...>

Hi, my Ruby C extension runs a C loop (libuv) without GVL. At some

8 messages 2012/05/29

Re: Am I justified to use a global variable if it must be used in all scopes?

From: Gennady Bystritsky <gennady-ruby@...>
Date: 2012-05-27 16:54:11 UTC
List: ruby-talk #395973
On May 27, 2012, at 5:33 AM, Phil Stone wrote:

> Hello,
> Ever since I started learning Ruby, I've been strongly discouraged
> from using global variables
> (http://www.caliban.org/ruby/rubyguide.shtml#style)
> (http://www.ruby-forum.com/topic/187685#819233).
>=20
> In a program I'm making, I have a variable (which stores an instance =
of
> a class) that is declared outside of any functions or classes. =
However,
> I need to be able to call its methods from various class and function
> scopes, and nothing but a global variable would let me do that. This
> variable is simply what the program is centered around, and must be
> accessed and edited by various classes. I'm not sure why a global
> variable would be such a bad habit in this case, especially since it =
is
> only one.
>=20
> Can I justify using it?

Avoid using globals as much as possible, variables or constants alike. =
The are very hard to look for where they are coming from, impossible to =
mock and painful while unit testing in general as they keep persistent =
state not being reset for individual test cases.

There are many alternatives to using globals, depending on your =
particular case. The best would be to design your app in a way that an =
instance can request what it needs from some other instance, possibly =
made available at instantiation (or via dependency injection). As others =
suggested, you can use a singleton for a class that provides state for =
the whole app, which I personally dislike. Or just class methods.

This is what I sometimes use when I need a quick and dirty way to do the =
job, to be refactored at the earliest opportunity:

=3D=3D=3D main script
class App
  def start
    ...
  end

  def self.config
    @config ||=3D Config.new
  end
end

App.new.start
=3D=3D=3D end of main script
=3D=3D=3D player.rb
class Player
  def config
    App::config
  end

  def perform
    return if config.idle_mode?
    ...
  end
end
=3D=3D=3D end of player.rb

While behaving exactly as a global config would, it makes it possible to =
mock config on several levels in your unit tests. Besides, you can =
clearly see where the data is coming from.

Hope this makes sense to you,
Gennady.

>=20
> --=20
> Posted via http://www.ruby-forum.com/.
>=20


In This Thread