我使用scala 2.8并定义如下枚举:
object Stooges extends Enumeration {
type Stooge = Value
val Larry, Curly, Moe = Value
}
我想在这个枚举中添加一个循环到“下一个”分支的方法。我可以在凳子外定义这样一种方法,这在测试程序中非常有效:
def nextStooge(v:Stooges.Stooge):Stooges.Stooge =
Stooges((v.id+1) % Stooges.values.size)
我真正想要的是将这个方法添加到凳子中,并且我尝试过这样做(同时使用凳子、凳子和凳子.value)。两者都编译。但是运行这样的程序:
import Stooges._
object App extends Application {
println(Stooges.nextStooge(Larry))
}
产量:
Exception in thread "main" java.lang.ExceptionInInitializerError
at demo.App.main(Stooges.scala)
Caused by: java.lang.IllegalArgumentException: wrong number of arguments
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:592)
at scala.Enumeration$$anonfun$scala$Enumeration$$nameOf$2.apply(Enumeration.scala:176)
at scala.Enumeration$$anonfun$scala$Enumeration$$nameOf$2.apply(Enumeration.scala:171)
at scala.collection.TraversableLike$WithFilter$$anonfun$foreach$1.apply(TraversableLike.scala:1200)
at scala.collection.IndexedSeqLike$class.foreach(IndexedSeqLike.scala:85)
at scala.collection.mutable.ArrayOps.foreach(ArrayOps.scala:20)
at scala.collection.TraversableLike$WithFilter.foreach(TraversableLike.scala:1199)
at scala.Enumeration.scala$Enumeration$$nameOf(Enumeration.scala:171)
at scala.Enumeration$Val.toString(Enumeration.scala:237)
at java.lang.String.valueOf(String.java:2615)
at java.io.PrintStream.print(PrintStream.java:616)
at java.io.PrintStream.println(PrintStream.java:753)
at scala.Console$.println(Console.scala:198)
at scala.Predef$.println(Predef.scala:152)
at demo.App$.<init>(Stooges.scala:14)
at demo.App$.<clinit>(Stooges.scala)
这是个错误还是个坏主意?