在 Scala 中将字符串加载到 Case 对象
Load a String to Case Object in Scala
我有以下对象:
sealed abstract class ImputationStrategy(name: String)
object ImputationStrategy {
case object Mean extends ImputationStrategy("Mean")
case object Median extends ImputationStrategy("Median")
case object Mode extends ImputationStrategy("Mode")
def fromString(imputeStrategy: String): Option[ImputationStrategy] = imputeStrategy.toLowerCase match {
case "mean" => Some(Mean)
case "median" => Some(Median)
case "mode" => Some(Mode)
case _ => None
}
}
我在应用程序启动期间加载的另一个 Config 对象中使用它。
case class ImputerConfig(strategy: ImputationStrategy = ImputationStrategy.Mean)
但不幸的是,当我这样解析它时:
imputerConfig = ImputationStrategy.fromString(cfg.getString("imputer.strategy")).orElse(ImputationStrategy.Mean)
它说它期待一个选项,但找到了 ImputationStrategy.Mean.type。我尝试将 String 解析为 case 对象的方式有问题吗?
使用getOrElse
:
imputerConfig = ImputationStrategy.fromString(cfg.getString("imputer.strategy")).getOrElse(ImputationStrategy.Mean)
orElse
接受 Option
。我认为在你的情况下你想在解析出错时给出一个默认对象。因此 getOrElse
更合适,因为 returns Option
对象的值
我有以下对象:
sealed abstract class ImputationStrategy(name: String)
object ImputationStrategy {
case object Mean extends ImputationStrategy("Mean")
case object Median extends ImputationStrategy("Median")
case object Mode extends ImputationStrategy("Mode")
def fromString(imputeStrategy: String): Option[ImputationStrategy] = imputeStrategy.toLowerCase match {
case "mean" => Some(Mean)
case "median" => Some(Median)
case "mode" => Some(Mode)
case _ => None
}
}
我在应用程序启动期间加载的另一个 Config 对象中使用它。
case class ImputerConfig(strategy: ImputationStrategy = ImputationStrategy.Mean)
但不幸的是,当我这样解析它时:
imputerConfig = ImputationStrategy.fromString(cfg.getString("imputer.strategy")).orElse(ImputationStrategy.Mean)
它说它期待一个选项,但找到了 ImputationStrategy.Mean.type。我尝试将 String 解析为 case 对象的方式有问题吗?
使用getOrElse
:
imputerConfig = ImputationStrategy.fromString(cfg.getString("imputer.strategy")).getOrElse(ImputationStrategy.Mean)
orElse
接受 Option
。我认为在你的情况下你想在解析出错时给出一个默认对象。因此 getOrElse
更合适,因为 returns Option
对象的值