1

我有一个 class Container,它有一个属性type存储其中存储的元素类型:

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,它们确实在它们的 ndarray 中存储了一个类型:

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

我怎样才能在水晶中实现类似的东西?

编辑: dtype 本身是 python 中的一个类,但它似乎仍然像我试图实现的那样持有一个类型/类

4

1 回答 1

2

我认为您应该为此使用泛型。

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

当然@type可以删除实例变量,因为您始终可以T在类定义中引用类型。

于 2016-12-22T19:58:50.547 回答