- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试重构 Enumeration
到具有具体类的密封特征,因为我需要将更多功能打包到它们中。使用密封特性,我希望具有类似于 Enumeration
的功能。的 withName(String)
方法。我想出了以下代码来这样做并正在寻找反馈:
sealed trait Foo {
def name: String
}
object Foo {
case object FooA extends Foo {
override val name: String = "a"
}
case object FooB extends Foo {
override val name: String = "b"
}
val values = Seq(FooA, FooB)
def withName(name: String): Option[Foo] = {
values.find(value => value.name.equals(name))
}
}
withName(String)
获取类型
Foo
对应的具体对象的方法作为
Option
:
val testFooAName = "a"
val testFooA = Foo.withName(testFooAName) // Will yield Some(FooA)
testFooA match {
case Some(Foo.FooA) => println("Matched Foo.FooA!")
case Some(Foo.FooB) => print("Matched Foo.FooB!")
}
val testFooNoneName = "none"
val testFooNone = Foo.withName(testFooNoneName) // Will yield None
Output:
Matched Foo.FooA!
最佳答案
是的,看起来不错
小幅简化:有一个 map 可以快速查找
val values = Seq(FooA, FooB)
val fastLookup = values.map(v => v.name -> v).toMap
def withName(name: String): Option[Foo] = fastLookup.get(name)
关于Scala 密封特征 - 复制枚举 `withName` 方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52085642/
当数据类扩展包含非抽象 open val 属性的密封类时,生成的子数据类包含与父类的私有(private)字段重复的私有(private)字段。 sealed class Foo(open val f
当封装一个.jar 文件(整个.jar,而不是特定的包)时,实际上封装了哪些包?它只是包含.class 文件的包,还是还包含父包和子包? 举个例子,假设我有一个包含单个 .class 文件 com.c
我可以很容易地为这样的密封案例类族一般派生一个编解码器: import io.circe._ import io.circe.generic.auto._ sealed trait Base case
我有一个类层次结构: class C1 { virtual object M1(); } class C2: C1 { override sealed object M1(); } class C3:
有什么区别: type MovieType = {| +blob?: string, +name: string, +url?: string |}; 和 type MovieType =
想象一个这样的 secret : apiVersion: v1 kind: Secret metadata: name: {{ include "test-cicd.fullname" . }}
因此,我的一位开发人员使用这样的函数为 Magento 电子商务网站制作自定义导航: getUrl() ?>">__('about') ?> 唯一的问题是它的输出如下: about 据我了解,如果同时
我是一名优秀的程序员,十分优秀!