2016-12-22 8 views
1

私はそれに保存されている要素の型を格納する属性typeを持つクラスContainer、持っている:セットの属性「クラス」、のfloat64

class Container 

    def initialize(@type = Class) 

    end 

end 

を私はしたいですこのようにそれを使用する:これを実行するとき

array = Container.new(Int32) 
# or 
array = Container.new(String) 

しかし、私が取得:can't use Class as the type of instance variable @dtype of Crystalla::Ndarray, use a more specific type

は、どのように私はこれを達成することができますか? 私はnumpyのような他の言語とlibrairiesを見れば、彼らは彼らのndarraysタイプを格納し実行します。

np.ndarray(shape=(2,2), dtype=float) 

どのように私は、結晶中の類似した何かを達成することができますか?

EDIT:DTYPEはPythonでクラス自体ですが、まだ私はあなたがそのためにジェネリックを使用すべきだと思う

答えて

2

を達成しようとしているようにタイプ/クラスを保持するようです。もちろん、インスタンス変数@type

class Container(T) 
    @type : T.class 
    @array : Array(T) 

    def initialize 
    @array = Array(T).new 
    @type = T 

    puts "Container elements type is #{@type}" 
    end 
end 

array = Container(Int32).new 

あなたは常にクラス定義でT型を参照することができますので、削除することができます。