[lnkForumImage]
TotalShareware - Download Free Software

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


 

Forums >

comp.lang.ruby

Redefining initialize while staying -w clean

Daniel Berger

4/5/2007 3:33:00 PM

Hi all,

Is it possible to redefine initialize and stay -w clean? In win32-file-
stat, I've redefined initialize to suit my needs for MS Windows.

If I do "undef_method(:initialize)" and run with -w, I'll get:

"warning: undefining `initialize' may cause serious problem".

However, if don't do that, I get "warning: method redefined;
discarding old initialize".

Help! I'm trapped!

Thanks,

Dan

10 Answers

James Gray

4/5/2007 3:40:00 PM

0

On Apr 5, 2007, at 10:35 AM, Daniel Berger wrote:

> If I do "undef_method(:initialize)" and run with -w, I'll get:
>
> "warning: undefining `initialize' may cause serious problem".

Does this work?

remove_method(:initialize) if method_defined? :initialize

James Edward Gray II

Andrew Johnson

4/5/2007 3:48:00 PM

0

Daniel Berger wrote:
> Hi all,
>
> Is it possible to redefine initialize and stay -w clean? In win32-file-
> stat, I've redefined initialize to suit my needs for MS Windows.
>
> If I do "undef_method(:initialize)" and run with -w, I'll get:
>
> "warning: undefining `initialize' may cause serious problem".
>
> However, if don't do that, I get "warning: method redefined;
> discarding old initialize".

Try aliasing the method before redefining it:

alias :old_init :initialize
def initialize() end

regards,
andrew


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

Daniel Berger

4/5/2007 3:51:00 PM

0

On Apr 5, 9:40 am, James Edward Gray II <j...@grayproductions.net>
wrote:
> On Apr 5, 2007, at 10:35 AM, Daniel Berger wrote:
>
> > If I do "undef_method(:initialize)" and run with -w, I'll get:
>
> > "warning: undefining `initialize' may cause serious problem".
>
> Does this work?
>
> remove_method(:initialize) if method_defined? :initialize

Unfortunately, using remove_method just issues a different message:
"warning: removing `initialize' may cause serious problem"

Regards,

Dan

Daniel Berger

4/5/2007 3:55:00 PM

0

On Apr 5, 9:47 am, Andrew Johnson <ajohn...@cpan.org> wrote:
> Daniel Berger wrote:
> > Hi all,
>
> > Is it possible to redefine initialize and stay -w clean? In win32-file-
> > stat, I've redefined initialize to suit my needs for MS Windows.
>
> > If I do "undef_method(:initialize)" and run with -w, I'll get:
>
> > "warning: undefining `initialize' may cause serious problem".
>
> > However, if don't do that, I get "warning: method redefined;
> > discarding old initialize".
>
> Try aliasing the method before redefining it:
>
> alias :old_init :initialize
> def initialize() end

That doesn't appear to work. Do you have a code snippet where it does
work? Perhaps I've missed something.

Thanks,

Dan

James Gray

4/5/2007 4:01:00 PM

0

On Apr 5, 2007, at 10:55 AM, Daniel Berger wrote:

> On Apr 5, 9:47 am, Andrew Johnson <ajohn...@cpan.org> wrote:
>> Daniel Berger wrote:
>>> Hi all,
>>
>>> Is it possible to redefine initialize and stay -w clean? In win32-
>>> file-
>>> stat, I've redefined initialize to suit my needs for MS Windows.
>>
>>> If I do "undef_method(:initialize)" and run with -w, I'll get:
>>
>>> "warning: undefining `initialize' may cause serious problem".
>>
>>> However, if don't do that, I get "warning: method redefined;
>>> discarding old initialize".
>>
>> Try aliasing the method before redefining it:
>>
>> alias :old_init :initialize
>> def initialize() end
>
> That doesn't appear to work. Do you have a code snippet where it does
> work? Perhaps I've missed something.

Remove the colons or swap alias with alias_method and add a comma.

James Edward Gray II

Andrew Johnson

4/5/2007 4:06:00 PM

0

Daniel Berger wrote:
>
> That doesn't appear to work. Do you have a code snippet where it does
> work? Perhaps I've missed something.

Perhaps I've misunderstood your case -- the following runs -w clean on
Ruby 1.8.6

$ cat init.rb

class String
alias :old_init :initialize
def initialize() end
end

$ ruby -w init.rb
$

andrew

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

Daniel Berger

4/5/2007 4:15:00 PM

0

On Apr 5, 10:06 am, Andrew Johnson <ajohn...@cpan.org> wrote:
> Daniel Berger wrote:
>
> > That doesn't appear to work. Do you have a code snippet where it does
> > work? Perhaps I've missed something.
>
> Perhaps I've misunderstood your case -- the following runs -w clean on
> Ruby 1.8.6
>
> $ cat init.rb
>
> class String
> alias :old_init :initialize
> def initialize() end
> end

Oh, I see. I had to remove the undef_method(:initialize) call with
this approach. Alright, this feels a bit clunky, but it will do the
job. The only thing I'm going to change is to making old_init
private. :)

Many thanks,

Dan

James Gray

4/5/2007 4:31:00 PM

0

On Apr 5, 2007, at 11:20 AM, Daniel Berger wrote:

> On Apr 5, 10:06 am, Andrew Johnson <ajohn...@cpan.org> wrote:
>> Daniel Berger wrote:
>>
>>> That doesn't appear to work. Do you have a code snippet where it
>>> does
>>> work? Perhaps I've missed something.
>>
>> Perhaps I've misunderstood your case -- the following runs -w
>> clean on
>> Ruby 1.8.6
>>
>> $ cat init.rb
>>
>> class String
>> alias :old_init :initialize
>> def initialize() end
>> end
>
> Oh, I see. I had to remove the undef_method(:initialize) call with
> this approach. Alright, this feels a bit clunky, but it will do the
> job. The only thing I'm going to change is to making old_init
> private. :)

Can't you safely remove it once it has been renamed?

James Edward Gray II

Daniel Berger

4/5/2007 4:49:00 PM

0

On Apr 5, 10:30 am, James Edward Gray II <j...@grayproductions.net>
wrote:
> On Apr 5, 2007, at 11:20 AM, Daniel Berger wrote:
>
>
>
>
>
> > On Apr 5, 10:06 am, Andrew Johnson <ajohn...@cpan.org> wrote:
> >> Daniel Berger wrote:
>
> >>> That doesn't appear to work. Do you have a code snippet where it
> >>> does
> >>> work? Perhaps I've missed something.
>
> >> Perhaps I've misunderstood your case -- the following runs -w
> >> clean on
> >> Ruby 1.8.6
>
> >> $ cat init.rb
>
> >> class String
> >> alias :old_init :initialize
> >> def initialize() end
> >> end
>
> > Oh, I see. I had to remove the undef_method(:initialize) call with
> > this approach. Alright, this feels a bit clunky, but it will do the
> > job. The only thing I'm going to change is to making old_init
> > private. :)
>
> Can't you safely remove it once it has been renamed?

Looks that way. This ran -w clean for me:

class String
alias old_init initialize
def initialize
puts "hello"
end
remove_method(:old_init)
end

Regards,

Dan

Daniel Berger

4/5/2007 5:19:00 PM

0

On Apr 5, 10:49 am, "Daniel Berger" <djber...@gmail.com> wrote:
> On Apr 5, 10:30 am, James Edward Gray II <j...@grayproductions.net>
> wrote:
>
>
>
>
>
> > On Apr 5, 2007, at 11:20 AM, Daniel Berger wrote:
>
> > > On Apr 5, 10:06 am, Andrew Johnson <ajohn...@cpan.org> wrote:
> > >> Daniel Berger wrote:
>
> > >>> That doesn't appear to work. Do you have a code snippet where it
> > >>> does
> > >>> work? Perhaps I've missed something.
>
> > >> Perhaps I've misunderstood your case -- the following runs -w
> > >> clean on
> > >> Ruby 1.8.6
>
> > >> $ cat init.rb
>
> > >> class String
> > >> alias :old_init :initialize
> > >> def initialize() end
> > >> end
>
> > > Oh, I see. I had to remove the undef_method(:initialize) call with
> > > this approach. Alright, this feels a bit clunky, but it will do the
> > > job. The only thing I'm going to change is to making old_init
> > > private. :)
>
> > Can't you safely remove it once it has been renamed?
>
> Looks that way. This ran -w clean for me:
>
> class String
> alias old_init initialize
> def initialize
> puts "hello"
> end
> remove_method(:old_init)
> end

Quick followup. For singleton methods you MUST use the "class << self"
style for both the alias and the definition to avoid warnings:

# This is -w clean
class File
class << self
alias :basename_orig :basename
def basename
puts "hello"
end
remove_method(:basename_orig)
end
end

# This is not
class File
class << self
alias :basename_orig :basename
end

def self.basename
puts "hello"
end

class << self
remove_method(:basename_orig)
end
end

Regards,

Dan