一个Scala泛型函数,它可以接受给定的任何T值。是否扩展枚举?
我试图制作一些函数,它们使用整个枚举和从枚举中选择的单个值作为参数 制作一个接受任何类型枚举对象作为参数的泛型函数很容易,但是如何制作一个接受枚举中任何单个值作为参数的泛型函数呢一个Scala泛型函数,它可以接受给定的任何T值。是否扩展枚举?,scala,generics,enums,Scala,Generics,Enums,我试图制作一些函数,它们使用整个枚举和从枚举中选择的单个值作为参数 制作一个接受任何类型枚举对象作为参数的泛型函数很容易,但是如何制作一个接受枚举中任何单个值作为参数的泛型函数呢 object Xenu extends Enumeration { type Xenu = Value val foo, bar, baz = Value } object Yenu extends Enumeration { type Yenu = Value val blip, blop, bla
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
object Xenu扩展枚举{
类型Xenu=Value
val foo,bar,baz=值
}
对象Yenu扩展了枚举{
类型Yenu=值
val blip、blop、blap、blep=值
}
def doStuff[E使用这样的签名,您将无法实现多少目标,但您可以这样做:
funnyBusiness
中的问题是,您对类型E
使用了
表示法,但该表示法不存在。要使用依赖于类型的类型,请使用
表示法,例如E#Value
除此之外,您的功能还可以:
def funnyBusiness[E <: Enumeration](v: E#Value): Unit = {
println(v)
}
def funnyBusiness[E拥有这样一个签名,您将无法实现多少目标,但现在您可以:
funnyBusiness
中的问题是,您对类型E
使用了
表示法,但该表示法不存在。要使用依赖于类型的类型,请使用
表示法,例如E#Value
除此之外,您的功能还可以:
def funnyBusiness[E <: Enumeration](v: E#Value): Unit = {
println(v)
}
def funnyBusiness[E解决方案非常简单:
def funnyBusiness[E <: Enumeration](v: E#Value): Unit = {
// This doesn't work!
println(v)
}
def funnyBusiness[E解决方案非常简单:
def funnyBusiness[E <: Enumeration](v: E#Value): Unit = {
// This doesn't work!
println(v)
}
def funnyBusiness[E同意,但这是一个大大简化的函数版本,它实际上做了一些有用的事情。您正确地找到了答案。绿色勾选+1代表您!同意,但这是一个大大简化的函数版本,它实际上做了一些有用的事情。您正确地找到了答案。绿色勾选+1代表您!