首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >尽管使用选项类,映射键仍未找到错误

尽管使用选项类,映射键仍未找到错误
EN

Stack Overflow用户
提问于 2015-11-12 21:39:37
回答 1查看 808关注 0票数 0

我对使用选项类型的概念很陌生,但为了避免这些错误,我尝试在这个类中使用它的多个位置。

下面的类用于存储数据。

代码语言:javascript
运行
复制
class InTags(val tag35: Option[String], val tag11: Option[String], val tag_109: Option[String], val tag_58: Option[String])

下面的代码接受一个字符串,并通过对等号进行分隔,将其转换为Int ->字符串映射。

代码语言:javascript
运行
复制
      val message= FIXMessage("8=FIX.4.29=25435=D49=REDACTED56=REDACTED115=REDACTED::::::::::CENTRAL34=296952=20151112-17:11:1111=Order7203109=CENTRAL1=TestAccount63=021=155=CSCO48=CSCO.O22=5207=OQ54=160=20151112-17:11:1338=5000040=244=2815=USD59=047=A13201=CSCO.O13202=510=127
")
       val tag58 =  message.fields(Some(58)).getOrElse("???")
        val in_messages= new InTags(message.fields(Some(35)), message.fields(Some(11)), message.fields(Some(109)), Some(tag58))
        println(in_messages.tag_109.getOrElse("???"))

其中FIXMessage对象定义如下:

代码语言:javascript
运行
复制
class FIXMessage (flds: Map[Option[Int], Option[String]]) {
  val fields = flds

  def this(fixString: String) = this(FIXMessage.parseFixString(Some(fixString)))

  override def toString: String = {
    fields.toString
  }
}
object FIXMessage{
  def apply(flds: Map[Option[Int], Option[String]]) = {
    new FIXMessage(flds)
  }

  def apply(flds: String) = {
    new FIXMessage(flds)
  }

  def parseFixString(fixString: Option[String]): Map[Option[Int], Option[String]] = {
     val str = fixString.getOrElse("str=???")
      val parts = str.split(1.toChar)
      (for {
        part <- parts
        p = part.split('=')
      } yield Some(p(0).toInt) -> Some(p(1))).toMap
  }
}  

我得到的错误是ERROR key not found: Some(58),但是选项类不处理这个问题吗?这基本上意味着传递给FIXMessage对象的字符串不包含格式为58=something的子字符串(这是真的)--什么是最好的方法?

EN

Stack Overflow用户

回答已采纳

发布于 2015-11-12 21:52:30

apply中使用Map方法,如果不存在键,则返回值或抛出NoSuchElementException

相反,您可以使用getOrElse,例如

代码语言:javascript
运行
复制
message.fields.getOrElse(Some(58), Some("str"))
票数 1
EN
查看全部 1 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33681945

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档