【问题标题】:Scala identify string with pattern matchingScala用模式匹配识别字符串
【发布时间】:2016-12-22 13:47:27
【问题描述】:

我想知道如何避免将Any 转换为String,而是使用模式匹配。

已从 spark like df.select('column).first.toSeq.head 收集数据帧 直接投射是一种解决方法df.select('column).first.toSeq.head.asInstanceOf[String],但是 我更喜欢使用 scala 原生模式匹配,例如

val collectedFromSpark: Any = "someString"
  val realString:String = collectedFromSpark match{
    case s:String => _
    case _ => throw new Exception("expected something else")
  }

但是,realString:String 只接收Any 而不是String

如何以 scala 原生方式制定此演员表?

【问题讨论】:

  • 将您的案例更改为case s: String => s 是否有效?
  • 是的。这就是解决方案。
  • 注意 - 使用 case s: String 是 Scala 中的代码异味,因为您正在创建运行时,即不是编译时,请检查。我建议在Parametricity 上进行此演讲。
  • 那你还有什么推荐的?
  • @KevinMeredith 当您拥有Any 类型的对象时,您无法避免运行时检查。我想说这里真正的代码味道,首先是有一个Any 类型的对象。

标签: string scala casting any


【解决方案1】:

把你的情况改成这样:

case s: String => s

现在它会知道sString

【讨论】:

    猜你喜欢
    • 2016-01-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-12-01
    • 2014-02-05
    • 2018-05-30
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多