【问题标题】:How to store different value types in scala如何在scala中存储不同的值类型
【发布时间】:2016-01-25 07:19:37
【问题描述】:

我可能有一个简单的愚蠢问题,如何使用 Scala Map 来存储不同的值类型,例如,我希望 Map 存储字符串和双精度值,我尝试了以下代码:

var yaraMap: Map[String, AnyRef] = Map()
yaraMap+={"as"->10.0}
yaraMap+={"bb"->'val'}

但它告诉类型不匹配,我该如何解决这个问题,谢谢!

【问题讨论】:

    标签: scala


    【解决方案1】:

    将您的地图定义为

    val yaraMap: Map[String, Any] = Map()
    

    AnyDoubleString 的通用超类型。

    下图演示了AnyValAnyRef 之间的关系。 StringAnyRef的子类型,DoubleAnyVal的子类型,它们共同的超类型是Any

    image source

    【讨论】:

    • 谢谢大卫,为什么 AnyRef 和 Object 不正常,但是请。
    • 因为Double 不是AnyRef 它的AnyVal
    • 非常感谢大卫提供的精美图片 :)
    【解决方案2】:

    大卫·弗兰克的回答很棒。这是使代码类型安全的一个小改进(注意:Any 和 AnyRef 将允许您将任何其他类型添加到 Map 而不会编译器抱怨)。

    如果您只希望您的值是 Double 或 String,您可以这样做:

    var yaraMap: Map[String, Either[Double, String]] = Map() 
    yaraMap+={"as"->Left(10.0)}
    yaraMap+={"bb"->Right("val")}
    

    可以说更冗长,但如果您尝试添加 List() 或任何其他类型,至少它会中断。

    yaraMap+={"as"->Left(34)}
     <console>:9: error: type mismatch;
     found   : List[String]
     required: Double
                  yaraMap+={"as"->Left(List("a"))}
    

    【讨论】:

      猜你喜欢
      • 2023-03-21
      • 2015-06-28
      • 2014-03-08
      • 2017-01-02
      • 2011-09-05
      • 1970-01-01
      • 2018-07-20
      • 1970-01-01
      • 2011-05-26
      相关资源
      最近更新 更多