Initialise

Hi all,

Being English and able to spell proper like, innit, I find I'm creating a lot of stupid errors by writing `def initialise` a lot. I had the bright idea of making an alias to stop this transatlantic turmoil, but I've no idea where to put it. Everything I've looked up boils down to "don't worry, initialize is sort of magic behind the scenes, just call new..."

I tried this:

class Object
  alias :initialise :initialize
end

but it didn't work. Is this possible, or do I have to start writing like the lead singer from Radiohead sings?

Regards,
Iain

Iain Barnett:

Being English and able to spell proper like, innit, I find I'm
creating a lot of stupid errors by writing `def initialise`
a lot.

:slight_smile:

I tried this:

class Object
  alias :initialise :initialize
end

but it didn't work.

It definitely does work – you can start using #initialise instead of
#initialize in your code. Note that it doesn’t make other code (notably,
BasicObject.new) call #initialise all of a sudden, which is probably
what you’d rather have, innit?

(You probably want to redeclare BasicObject.new,
except you probably don’t want to, not *really*.)

— Piotr Szotkowski

···

--
phrases that shouldn’t exist on the web:
read more after the jump
skip this ad
remember me on this computer
page 1 of #
                            [Faruk Ateş]

I see your point.

I would follow the language. Issues with other coders and such will arise..

Alias for Initialize doesn't fit.

1. Initialize is a private method.
2. The Object inherently calls Initialize upon creation. When the object is
instantiated its calls Initialize. Alias is created by this time, and there
is no no need to call it after creation.
3. Aliasing in the way you are attempting is calling it a second time.

Its probably better to follow the language.

Just a quick irb session:

irb(main):001:0> class Joe
irb(main):002:1> alias :initialise :initialize
irb(main):003:1> def initialize
irb(main):004:2> print "where you going with that gun in your hand?"
irb(main):005:2> @gun = 0
irb(main):006:2> end
irb(main):007:1> end
=> nil
irb(main):008:0> jimi = Joe.new
where you going with that gun in your hand?=> #<Joe:0x36a22c @gun=0>
irb(main):009:0> jimi.initialise
NoMethodError: private method `initialise' called for #<Joe:0x36a22c @gun=0>
    from (irb):9

···

From: Iain Barnett <iainspeed@gmail.com>
Reply-To: <ruby-talk@ruby-lang.org>
Date: Thu, 26 Aug 2010 22:04:22 +0900
To: ruby-talk ML <ruby-talk@ruby-lang.org>
Subject: Initialise

Hi all,

Being English and able to spell proper like, innit, I find I'm creating a lot
of stupid errors by writing `def initialise` a lot. I had the bright idea of
making an alias to stop this transatlantic turmoil, but I've no idea where to
put it. Everything I've looked up boils down to "don't worry, initialize is
sort of magic behind the scenes, just call new..."

I tried this:

class Object
  alias :initialise :initialize
end

but it didn't work. Is this possible, or do I have to start writing like the
lead singer from Radiohead sings?

Regards,
Iain

I would follow the language. Issues with other coders and such will arise..

The language I was trying to follow was English, but there you go... :slight_smile:

···

On 26 Aug 2010, at 15:03, Joseph E. Savard wrote:

On 26 Aug 2010, at 14:49, Piotr Szotkowski wrote:

Note that it doesn’t make other code (notably,
BasicObject.new) call #initialise all of a sudden, which is probably
what you’d rather have, innit?

That was the one I was going for. Ah well.

Thanks both for your input. I suppose my only recourse now is to start hacking on the Ruby source and get my patch submitted in time for Ruby 2.0 :slight_smile:

Regards,
Iain

class Object
  alias :old_initialize :initialize
  def initialize(*args,&blk)
    if respond_to? :initialise
      initialise(*args,&blk)
    else
      old_initialize(*args,&blk)
    end
  end
end

class Foo
  def initialize(n)
    @n = n
  end
end

class Bar
  def initialise(m)
    @m = m
  end
end

p Foo.new(123)
p Bar.new(456)

You get a warning about redefining initialize, but it seems to work.

I suppose my only recourse now is to start
hacking on the Ruby source and get my patch submitted in time for Ruby
2.0 :slight_smile:

That will be released some time between perl 6 and hell freezing over
:slight_smile:

···

--
Posted via http://www.ruby-forum.com/\.

class Object
alias :old_initialize :initialize
def initialize(*args,&blk)
   if respond_to? :initialise
     initialise(*args,&blk)
   else
     old_initialize(*args,&blk)
   end
end
end

class Foo
def initialize(n)
   @n = n
end
end

class Bar
def initialise(m)
   @m = m
end
end

p Foo.new(123)
p Bar.new(456)

You get a warning about redefining initialize, but it seems to work.

Thanks, I'll give that a shot.

I suppose my only recourse now is to start
hacking on the Ruby source and get my patch submitted in time for Ruby
2.0 :slight_smile:

That will be released some time between perl 6 and hell freezing over
:slight_smile:

I was thinking of using Perl6 to write Ruby2.0 :slight_smile:

Regards
Iain

···

On 26 Aug 2010, at 15:54, Brian Candler wrote:

class Object
alias :old_initialize :initialize
def initialize(*args,&blk)
if respond_to? :initialise
initialise(*args,&blk)
else
old_initialize(*args,&blk)
end
end
end

class Foo
def initialize(n)
@n = n
end
end

class Bar
def initialise(m)
@m = m
end
end

p Foo.new(123)
p Bar.new(456)

You get a warning about redefining initialize, but it seems to work.

What about inheritance especially in light of "super"? I'm with
Joseph here: better adjust to the programming language and stick with
"initialize".

I suppose my only recourse now is to start
hacking on the Ruby source and get my patch submitted in time for Ruby
2.0 :slight_smile:

That will be released some time between perl 6 and hell freezing over
:slight_smile:

Can't be too long though. :slight_smile:

Cheers

robert

···

2010/8/26 Brian Candler <b.candler@pobox.com>:

--
remember.guy do |as, often| as.you_can - without end
http://blog.rubybestpractices.com/