语法中的运行时异常,例如定义具有相同名称的两个val

时间:2013-11-07 19:40:10

标签: scala syntax

在某本书中,我有一个类似的代码:

object ValVarsSamples extends App {

  val pattern = "([ 0-9] +) ([ A-Za-z] +)". r   // RegEx

  val pattern( count, fruit) = "100 Bananas"
}

这应该是一个技巧,它应该为两个val定义相同的名称,但它不是。

所以,这是一个例外。

问题:这可能是什么? (那应该是什么?)以及为什么它不起作用?

- 据我所知:val模式 - 指RegEx构造函数..在第二个val我们试图使用这样的语法传递params?只是放一个字符串

2 个答案:

答案 0 :(得分:2)

这是一个提取器:

val pattern( count, fruit) = "100 Bananas"

此代码等效

val res = pattern.unapplySeq("100 Bananas")
count = res.get(0)
fruit = res.get(1)

答案 1 :(得分:1)

问题是你的正则表达式不匹配,你应该把它改为:

val pattern = "([ 0-9]+) ([ A-Za-z]+)". r

[ A-Za-z] +中+之前的空格表示您匹配类[ A-Za-z]中的单个字符,然后匹配至少一个空格字符。您对[ 0-9] +也有同样的问题。

Scala正则表达式定义一个提取器,它返回正则表达式中匹配组的序列。你的正则表达式定义了两个组,所以如果匹配成功,序列将包含两个元素。