【问题标题】:"No Manifest available for Type" error“没有可用于类型的清单”错误
【发布时间】:2016-05-26 02:28:55
【问题描述】:

我尝试编写一些 Scala 类

abstract class A { var a : Int = _}
class B[T] extends A { var b : T = _ }
class C[T] extends A { var c : T = _ }
class Abc[T : Manifest] {
    var array : Array[T] = _
    def this(capacity : Int, f : Unit => T) = {
        this()
        array = new Array[T](capacity)
        for(i <- 0 until capacity)
            array(i) = f()
    }
}

class Xyz[T] { 
    var m : Abc[C[T]] = _; 
    def this(capacity : Int) = { 
    this(); 
    m = new Abc[C[T]](capacity, Unit => { new C[T]() })
    }
}

var xyz = new Xyz[Int](10)

但我得到了:

error: No Manifest available for C[T].
       class Xyz[T] { var m : Abc[C[T]] = _; def this(capacity : Int) = { this(); m = new Abc[C[T]](capacity, Unit => { new C[T]() })}}
                                                                                      ^

据我了解,我需要为 lambda 函数设置隐式 Manifest 参数

Unit => { new C[T]() })

但是我该怎么做呢?还是我完全错了?

【问题讨论】:

    标签: scala


    【解决方案1】:

    你只需要从顶部一直携带清单,类型是已知的:

    class Xyz[T : Manifest] { ...
    

    应该这样做。

    【讨论】:

      猜你喜欢
      • 2014-10-06
      • 1970-01-01
      • 2014-02-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-05-08
      • 1970-01-01
      • 2020-01-07
      相关资源
      最近更新 更多