我是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
(需要这样做)。我知道这是一个非常小的更改,但不能放置什么。请帮助。
4条答案
按热度按时间gzszwxb41#
我不明白你的问题。但是如果你想用
oldName
作为模式,你必须大写它。如果这不能解决你的问题,请更清楚、更准确地说明你的问题。
wfveoks02#
我认为你必须添加toString()
这里case Some(oldName)=〉empInfo.copy(empType = Some(newName)).toString()case _ =〉empInfo
omhiaaxx3#
我不知道你想要什么,但这可能会帮助你:
我认为你不应该更新EmpInfo。如果你需要里面的newName,只需创建一个新的并使用新的。垃圾收集器将清理旧的。
lnlaulya4#
据我所知,您面临的问题是将
String
类型转换为Option[String]
类型。然后试着像这样 Package 它:
Option(<variablename>)
,如示例中的Option(newvalue)
。