相关疑难解决方法(0)

案例对象与Scala中的枚举

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

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

enumeration scala case-class

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

在Scala中对密封特性进行迭代?

我只是想知道是否有可能在Scala中迭代密封的特征?如果没有,为什么不可能?由于特性是密封的,应该可以吗?

我想做的是这样的:

sealed trait ResizedImageKey {

  /**
   * Get the dimensions to use on the resized image associated with this key
   */
  def getDimension(originalDimension: Dimension): Dimension

}

case class Dimension(width: Int,  height: Int)

case object Large extends ResizedImageKey {
  def getDimension(originalDimension: Dimension) = Dimension(1000,1000)
}

case object Medium extends ResizedImageKey{
  def getDimension(originalDimension: Dimension) = Dimension(500,500)
}

case object Small extends ResizedImageKey{
  def getDimension(originalDimension: Dimension) = Dimension(100,100)
}
Run Code Online (Sandbox Code Playgroud)

通过给枚举值赋予实现,我可以用Java完成.Scala中有同等的东西吗?

enumeration scala sealed scala-macros

38
推荐指数
3
解决办法
1万
查看次数

使用Singleton对象作为枚举元素的Scala枚举以及迭代它们的可能性?

我已经看过关于模拟Javaenum案例类与EnumerationScala问题,但似乎太多的努力,太少的好处.

基本上我想有一个values方法返回所有单例对象DayOfWeek而不重复自己几次.

这就是我的代码应该是这样的:

object DayOfWeek extends MyEnum {
  object MONDAY extends DayOfWeek(1)
  object TUESDAY extends DayOfWeek(2)
  object WEDNESDAY extends DayOfWeek(3)
  object THURSDAY extends DayOfWeek(4)
  object FRIDAY extends DayOfWeek(5)
  object SATURDAY extends DayOfWeek(6)
  object SUNDAY extends DayOfWeek(7)
}

class DayOfWeek(ordinal: Int)
Run Code Online (Sandbox Code Playgroud)

该方法values应返回类似如下所示的内容:

val values = Array(MONDAY, TUESDAY, WEDNESDAY, THURSDAY,
                   FRIDAY, SATURDAY, SUNDAY)
Run Code Online (Sandbox Code Playgroud)

一切都应该在MyEnum特质中发生,所以我只需要扩展它来获得功能.

trait MyEnum {
  val values = this.getClass.getField("MODULE$") etc. etc.
}
Run Code Online (Sandbox Code Playgroud)

有什么建议可以做到这一点吗?这个想法是values访问类并找到它们正在扩展的类的所有单例对象. …

java reflection enums scala

9
推荐指数
1
解决办法
2258
查看次数

引用方法签名中的枚举值类型

我想为scala.Enumeration添加一个方法.我的第一个方法是试图扩展它,但被这个咬了.我的第二种方法是尝试定义一个方法,并传入Enumeration - 如果有效,我希望使用隐式转换.但是,我很难用类型的返回类型保留类型.

object EnumExample {
  object SampleEnum extends Enumeration {
    val include, exclude = Value
  }

  def parse[T <: Enumeration](name:String, enum:T):T#Value =
    enum.valueOf(name) match {
      case Some(x) => x
      case x => throw new RuntimeException("No field named '" + name + "' found on enum " + enum + ", legal values = " + enum.values)
    }

  def main(args:Array[String]) = {
    //compiles fine, and preserves custom type
    val withNameExample:SampleEnum.Value = SampleEnum.withName("include")

    //also fine, but we lost type …
Run Code Online (Sandbox Code Playgroud)

enumeration scala

4
推荐指数
1
解决办法
2297
查看次数