Этот код должен сделать это:
object Gender extends Enumeration {
type Gender = Value
val Male, Female = Value
}
def toFactor[E <: Enumeration, V <: E#Value](enum: E, elem: V): List[Double] = {
var array = Array.fill(enum.maxId)(0.0)
array(elem.id) = 1.0
array.toList
}
println(toFactor(Gender, Gender.Female)) // prints: List(0.0, 1.0)
Вам нужно использовать E#Value
вместо E.Value
, потому что оно обычно говорит: любое Value
из предоставленных Enumeration
E
. E <: Enumeration
ограничивает E
подклассом Enumeration
. Вам также нужен экземпляр enum, чтобы получить maxId
.
Обновление
Вы также можете немного упростить метод toFactor
и избегать использования любых Array
s или id
s:
def toFactor[T <: Enumeration, V <: T#Value](enum: T, elem: V): List[Double] =
enum.values.toList map (curr => if (curr == elem) 1.0 else 0.0)