【问题标题】:Scala: string pattern matchingScala:字符串模式匹配
【发布时间】:2017-10-23 22:57:04
【问题描述】:

下面的代码获取字符串的前两个字符并检查模式是否为"de" or None 它返回 None 否则它返回Test("Found")

val s =Option("abc")
val t = s.map(_.take(2))
case class Test(id:String)

t match {
  case Some("de") => None
  case None => None
  case _ => Test("Found")
}

任何人都可以提出一个有效的案例匹配解决方案

【问题讨论】:

  • 问题是什么?
  • 已编辑问题请检查

标签: scala match


【解决方案1】:

我想我明白你的要求,所以让我试试这个:

val condition = Option("abc").exists(_.toLower.take(2) == "de")
val output: Any = if(condition) Test("found") else None

如果OptionNone,则第一部分返回false。如果字符串的前两个字母是"de",它也会返回false,不区分大小写。

第二部分返回NoneTest 对象。但是,我想指出这会导致Any。您的意思是让它返回 Option[Test] 类型吗?

【讨论】:

  • 是返回类型为Option[Test] 不是Any
【解决方案2】:

我认为,从您对另一个答案的评论来看,您在 sn-p 的最后一行是指Some(Test("Found"))。 如果是这样,这就是您正在寻找的:

t.filterNot(_.take(2) == "de").map(_ => Test("Found"))

【讨论】:

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