一个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代表您!