使用'案例'获取值在斯卡拉

时间:2016-02-16 16:37:00

标签: scala

我是scala的新手,不要因为我的问题而生我的生气,请帮我看看解析如何解释我的例子:

我想解析这样的字符串:

Integer

所以基本上我希望用IPAdress拆分它们,然后将第一个解析为class IPAddress(val cartage1 : Integer, cartage2 : Integer, cartage3: Integer, cartage4 : Integer) { } ,将第二个解析为@IBOutlets到这样的结构:

findViewById

你能帮我做一下吗?

1 个答案:

答案 0 :(得分:1)

我认为“案例解析”是指extractorregex class?嗯,一个简单的变体如下:

scala> val pattern = """(\d+)\s+(\d{1,3})\.(\d{1,3})\.(\d{1,3})\.(\d{1,3})""".r
pattern: scala.util.matching.Regex = (\d+)\s+(\d{1,3})\.(\d{1,3})\.(\d{1,3})\.(\d{1,3})

scala> val pattern(d, i1, i2, i3, i4) = "6546263252026003359  192.168.1.1"
d: String = 6546263252026003359
i1: String = 192
i2: String = 168
i3: String = 1
i4: String = 1

如果你想确保有效的IP,那么正如我们可能会使用正则表达式。

下面发生的事情是pattern定义了unapply String => Option[(Int, Int, Int, Int, Int)]类型的方法,所以类似

"6546263252026003359  192.168.1.1" match {
  case pattern(d, i1, i2, i3, i4) => IPAddress(i1, i2, i3, i4)
}

得到(反对)翻译成这个:

pattern.unapply("6546263252026003359  192.168.1.1") match {
  case Some((d, i1, i2, i3, i4)) => IPAddress(i1, i2, i3, i4)
  case None => /* throw some error */
}

上面显示的模式分配类似,它只是修改了本地环境。可以查看技术here,也可以在spec中查找。