scala 将字符串转换为选项[String]

k5hmc34c  于 2023-03-30  发布在  Scala
关注(0)|答案(4)|浏览(153)

我是scala编程的新手,在从String转换到Option[String]时遇到了困难。我不确定我所遵循的方法是否正确。下面是代码:

EmpInfo.scala:

package model
case class EmpInfo(empType: Option[String]) extends Named {
  override def name: String = clientName
}

EmpReconciliator.scala

import scalaz._
import Scalaz._
import scala.concurrent.Future
import play.api.mvc.Action
import play.api.mvc.AnyContent
import model.EmpInfo

trait EmpReconciliator[A] extends BaseController[A] {

  val oldName  = "abc"
  val newName = "xyz"
  def reconcileGeneric(genericResource: A) = {
    (genericResource match {         
      case empInfo : EmpInfo => reconcileEmpInfo(empInfo)
      case other@_ => other
    }).asInstanceOf[A]
  }

  def reconcileEmpInfo(empInfo: EmpInfo) = {
    empInfo.empTypeType match {
      case Some(oldName) => empInfo.copy(empType = Some(newName))
      case _ => empInfo
    }
  }
}

在这里,我需要用newName替换oldName的所有示例。但是,我在响应中得到"1"。我不能将empType: Option[String]的类型更改为String(需要这样做)。我知道这是一个非常小的更改,但不能放置什么。请帮助。

gzszwxb4

gzszwxb41#

我不明白你的问题。但是如果你想用oldName作为模式,你必须大写它。

val OldName  = "abc"
val newName = "xyz"

empInfo.empType match {
  case Some(OldName) => empInfo.copy(empType = Some(newName))
  case _ => empInfo
}

如果这不能解决你的问题,请更清楚、更准确地说明你的问题。

wfveoks0

wfveoks02#

我认为你必须添加toString()
这里case Some(oldName)=〉empInfo.copy(empType = Some(newName)).toString()case _ =〉empInfo

omhiaaxx

omhiaaxx3#

我不知道你想要什么,但这可能会帮助你:

def reconcileEmpInfo(empInfo: EmpInfo) : EmpInfo  = {
    EmpInfo(Option(newName))
}

我认为你不应该更新EmpInfo。如果你需要里面的newName,只需创建一个新的并使用新的。垃圾收集器将清理旧的。

lnlaulya

lnlaulya4#

据我所知,您面临的问题是将String类型转换为Option[String]类型。
然后试着像这样 Package 它:Option(<variablename>),如示例中的Option(newvalue)

相关问题