[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[dennou-ruby:001290] Re: initialize mathod



堀之内です。

このメール、今まで見落としてましたが、解決しましたか > 西澤様。

C で書いてあるか否かというより、new が initialize を呼ぶ
ようになっているかどうかでしょう。例えば Array のソースを見ると
initialize というメソッドが定義してあって、new はそれを呼ぶよう
に見えます。しかし、NArray はそうなってないということでしょう
から、意図する通りのことをしようと思ったら new を(orも)再定義す
るか、NArray を改訂するしかないでしょうね。

しかし、欠損値処理をする NArray を作ろうと思ったら、継承をつかわ
ず、NArray をラッピングする手もあります。つまり、@xxxxxx に加えて
本体も、内部変数の NArray のオブジェクトとして陽に持つ。そのほう
が随分作りやすく、ソースコードの見通しも良くなるだろうと思います
が如何でしょう。もとの NArray のメソッドのうち、そのまま使えるも
のについては、継承しなくても、まとめて簡単に「委譲」できますし。

欠損値処理付多次元配列は是非とも欲しいので、出来上がりを期待して
ます。


> 西澤です。
> 
> Cで書かれたClassの subClassの initializeメソッドは
> new時に呼び出されないみたいなんですけど
> これって仕様なんでしょうかね
> 
> 
> e.g
> %irb
> irb(main):001:0> require "narray"
> true
> irb(main):002:0> class Test  < NArray
> irb(main):003:1> def initialize
> irb(main):004:2> p "a"
> irb(main):005:2> end
> irb(main):006:1> end
> nil
> irb(main):007:0> Test.new(1,1)
> Test.byte(1): 
> [ 0 ]
> 
> 
> 欠損値処理のために
> class NArrayMiss
>   def initialize(*arg)
>      super
>      @xxxxxx = NArray.byte(*arg[1..-1]).fill(0)
>   end
>   :
> end
> みたいなクラスを作ろうとしたんですが@xxxxxx
> そもそもこんなやり方間違ってます?
> できればrubyで書きたいのですが。
> ----------
> Seiya Nishizawa
> seiya@xxxxxx