Ответ 1
Чтобы создать экземпляр массива в общем контексте (создание экземпляра массива T
, где T
является параметром типа), Scala должен иметь информацию во время выполнения около T
, в виде неявного значения типа ClassTag[T]
.
Конкретно, вам нужно, чтобы вызывающий объект вашего метода (неявно) передал это значение ClassTag
, которое удобно выполнить с помощью привязки к контексту:
def foo[T:ClassTag](count: Int, value: T): Array[T] = Array.fill[T](count)(value)
Подробное описание этой ситуации см. в этом документе:
http://docs.scala-lang.org/sips/completed/scala-2-8-arrays.html
(Короче говоря, ClassTags - это переработанная реализация ClassManifests, поэтому логика остается)