我正在尝试创建一些函数,它们使用整个Enumeration和从Enumeration中选择的单个值作为参数。
很容易创建一个接受任何类型的Enumeration对象作为参数的泛型函数,但是如何创建一个接受Enumeration中任何单个值的泛型函数作为它的参数?
object Xenu extends Enumeration {
type Xenu = Value
val foo, bar, baz = Value
}
object Yenu extends Enumeration {
type Yenu = Value
val blip, blop, blap, blep = Value
}
def doStuff[E <: Enumeration](e:E):Int = {
// Works fine
println("Got an enum: " + e.toString())
e.values.size
}
def funnyBusiness[E <: Enumeration](v: E.Value): Unit = {
// This doesn't work!
println(v)
}
doStuff(Xenu) // Works
doStuff(Yenu) // Works
funnyBusiness(Xenu.bar) // Wrong
funnyBusiness(Yenu.blip) // Wrong
你能帮我写一个“funnyBusiness”的泛型函数声明,这样我可以接受任何Enumeration中的任何一个值吗?
答案 0 :(得分:2)
你可以用这样的签名获得很多东西,但是你去了:
funnyBusiness
中的问题是您对.
类型使用E
表示法,该表示法不存在。要使用类型相关类型,请使用#
表示法,例如E#Value
。
除此之外,你的功能很好:
def funnyBusiness[E <: Enumeration](v: E#Value): Unit = {
println(v)
}
答案 1 :(得分:0)
解决方案非常简单:
def funnyBusiness[E <: Enumeration](v: E#Value): Unit = {
// This doesn't work!
println(v)
}