Overriding NArray.new

class Sound < NArray
def initialize
puts ‘Chunky. Bacon.’
end
end

Sound.new(4,10) #=> Sound.sfloat(10): [ 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
0.0, 0.0, 0.0, 0.0 ]

I’m not sure why this is, but I bet it has something to do with the way
NArray is implemented in C. That’s keen, but I’d really like to
override new (I’d do something more useful than above, I promise).
Overriding other methods of NArray is no problem. Is there any hope?

On Friday 18 November 2005 16:32, Hans F. wrote:

I’m not sure why this is, but I bet it has something to do with the way
NArray is implemented in C. That’s keen, but I’d really like to
override new (I’d do something more useful than above, I promise).
Overriding other methods of NArray is no problem. Is there any hope?

Never used NArray before, but try calling super() with the args you’d
normally
give an NArray if it wasn’t a Sound so that NArray’s initialize method
gets
called. :slight_smile:

Ah, I figured it out:

class Sound < NArray
def self.new(typecode, frames, channels)
super
end
end

That’s an oversimplified version of the end product.

Never used NArray before, but try calling super() with the args you’d
normally give an NArray if it wasn’t a Sound so that NArray’s
initialize method gets called. :slight_smile:

Yup, I do want to call super. My example was contrived such as to make
it painfully obvious that even if you don’t call super, NArray’s
initialize gets magically called instead of the subclass’s.