无法推断实例变量的类型' @ id'文件

时间:2018-04-13 19:41:56

标签: type-inference crystal-lang

我有以下类,它实际上是视图模型,我试图根据数据库模型初始化它,如下所示:

class Document

  @id   : Int64
  @name : String

  JSON.mapping(
    id: Int64,
    name: String,
  )

  def initialize(db_model)
    @id   = db_model.id
    @name = db_model.name
  end

end

以下是示例数据模型:

class DatabaseModel < ActiveRecord::Model

  @@connection_pool_capacity = 25
  @@connection_pool_timeout  = 0.03

  adapter postgres

  table_name database_model

  primary id  : Int
  field name  : String

end

但是我收到以下错误:

  

在src / models / document.cr中:10:实例变量&#39; @ id&#39;文件必须是Int64,而不是(Int16 | Int32 | Int64 | Int8 | Int :: Null | UInt16 | UInt32 | UInt64 | UInt8)

我希望以最语义正确的方式执行此操作。在这种情况下推断正确类型的最佳方法是什么?

1 个答案:

答案 0 :(得分:3)

此错误不涉及任何推断。这只是Int64返回的Document#@idInt的预期DatabaseModel#id之间的类型不匹配。

有两种方法可以解决此问题:使用dv_model.idInt64转换为#to_i64或将DatabaseModel#id键入Int64。后者可能是首选方式,因为通常没有必要将I&#d存储为不同的Int数据类型。