为什么scala编译器很难编译这个简单的无形代码?

时间:2016-01-09 01:03:04

标签: scala shapeless

import shapeless._; import labelled._;
object CreateField {
  type OptionalField[K <: Symbol, T] = FieldType[K, Option[T]]

  def pure[K <: Symbol, T](key: Witness.Aux[K], v: Option[T]): OptionalField[K, T] = {
    field[K](v) 
  }
}

抱怨是

  

发现:v.type(底层类型为Option [T])[错误]需要:   具有选项[T]

的shapeless.labelled.KeyTag [K,Option [T]]

但是,如果指定字段[K] .apply [Option [T]]的类型,它会编译,或者如果您只是先将其设置为val并返回该val,则以下方法体编译:< / p>

 def pure[K <: Symbol, T](key: Witness.Aux[K], v: Option[T]): OptionalField[K, T] = {
    val f = field[K](v)
    f
  }
}

如果您不使用OptionalField类型别名,它也会编译。

这是一个ScalaC错误还是scalaC推断类型的方式与这种field方法无形无关?

0 个答案:

没有答案