相关疑难解决方法(0)

案例对象与Scala中的枚举

是否有关于何时使用案例类(或案例对象)与在Scala中扩展Enumeration的最佳实践指南?

他们似乎提供了一些相同的好处.

enumeration scala case-class

225
推荐指数
9
解决办法
11万
查看次数

我是否可以获得所有案例对象的编译时列表,这些案例对象派生自Scala中的密封父代?

正如在SO上多次讨论的那样,如果你没有详尽地列出从密封类派生的所有类型,Scala匹配将警告你.

我想要的是编译时生成的Iterable来自特定父级的案例对象.或者,我很高兴有一种方法可以让编译器告诉我在某些Iterable中没有所有必要的类型.我不想要一个基于反射的运行时方法.

作为第二种方法的一个例子,我想让下面的粗略代码生成一个编译错误.

sealed trait Parent
case object A extends Parent
case object B extends Parent
case object C extends Parent

// I want a compiler error here because C is not included in the Seq()
val m = Seq(A, B).map(somethingUseful)
Run Code Online (Sandbox Code Playgroud)

请告诉我这是不可能的,随意回答.它似乎应该在某种程度上是可能的,因为在确定匹配是非详尽的时,编译器必须完成基本相同的工作.

再考虑一下,除了应用于case对象之外,我会采用类似Enumeration.values()方法的方法.当然,我可以添加一些类似于上面代码的东西,并将一个手动维护的值列表添加到父对象的对象中,但是当编译器可以为我做这件事时,这似乎不必要地容易出错.

// Manually maintained list of values
object Parent { 
    val values = Seq(A, B, C)
}
Run Code Online (Sandbox Code Playgroud)

scala

33
推荐指数
2
解决办法
5873
查看次数

如何获得Scala 2.10反射引用的实际对象?

请考虑以下代码:

object ResponseType extends Enumeration {
  val Listing, Album = Value
}
Run Code Online (Sandbox Code Playgroud)

我可以Symbol像这样引用这个对象:

import reflect.runtime.universe._
val s = typeOf[ResponseType.Value].asInstanceOf[TypeRef].pre.typeSymbol
Run Code Online (Sandbox Code Playgroud)

现在,有了这个符号,我怎样才能获得实际的ResponseType对象?

reflection scala scala-2.10

8
推荐指数
1
解决办法
1425
查看次数

标签 统计

scala ×3

case-class ×1

enumeration ×1

reflection ×1

scala-2.10 ×1