将String转换为Option [String]

时间:2017-05-22 08:57:02

标签: scala playframework

我是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
    }
  }
}

在这里,我需要将oldName的所有实例替换为newName。 但相反,我在回复中得到"1"。我无法将empType: Option[String]的类型更改为String(需要这样)。 我知道这是一个非常小的变化,但不能放置什么。 请帮忙。

3 个答案:

答案 0 :(得分:1)

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

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

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

如果这还没有解决您遇到的问题,请更清楚,更准确地说出您的问题。

答案 1 :(得分:0)

我认为你必须添加toString()
               这里           case Some(oldName)=> empInfo.copy(empType =           有些(newName)将)。的toString()           case _ => empInfo

答案 2 :(得分:-1)

据我了解,您面临的问题是将String类型转换为Option[String]类型。

然后尝试将其包装为:Option(<variablename>),如示例中的Option(newvalue)