[英]Scala Regex example not working
我对scala还是很陌生,我正在尝试使用正则表达式解决问题,但出现错误。
我直接从文档(2.10.4)复制了一个示例,但遇到了同样的错误。
我在这里想念的是什么:
println(scala.tools.nsc.Properties.versionString)
val p1 = "ab*c".r
val p2 = "a(b*)c".r
val p1Matches = "abbbc" match {
case p1() => true
case _ => false
}
生产:
version 2.10.4
Exception in thread "main" java.lang.NoSuchMethodError: scala.util.matching.Regex.unapplySeq(Ljava/lang/CharSequence;)Lscala/Option;
at SparkGrep$.argsParser(SparkGrep.scala:67)
at SparkGrep$.main(SparkGrep.scala:23)
at SparkGrep.main(SparkGrep.scala)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
...
第67行是说:
case p1() => true
供参考,此示例直接从http://www.scala-lang.org/api/2.10.4/index.html#scala.util.matching.Regex的unappplyseq示例复制而来
更新,我已经创建了一个示例项目,实际上可以工作。 我发现这与我的构建过程有关,但我不知道为什么。
这是坏掉的项目的build.sbt
name := "logdata-demo-07-22-2015"
version := "1.0"
scalaVersion := "2.10.4"
resolvers ++= Seq(
"Typesafe Releases" at "http://repo.typesafe.com/ typesafe/releases",
"spray repo" at "http://repo.spray.io"
)
resolvers += "spray" at "http://repo.spray.io/"
val sparkVersion = "1.3.0"
libraryDependencies ++= Seq(
"org.apache.spark" %% "spark-mllib" % sparkVersion,
"org.apache.spark" %% "spark-sql" % sparkVersion,
"com.databricks" %% "spark-csv" % "1.1.0",
"com.github.scopt" %% "scopt" % "3.3.0"
)
assemblyMergeStrategy in assembly := {
case m if m.toLowerCase.endsWith("manifest.mf") => MergeStrategy.discard
case m if m.toLowerCase.matches("meta-inf.*\\.sf$") => MergeStrategy.discard
case "log4j.properties" => MergeStrategy.discard
case m if m.toLowerCase.startsWith("meta-inf/services/") => MergeStrategy.filterDistinctLines
case "reference.conf" => MergeStrategy.concat
case _ => MergeStrategy.first
}
assemblyOutputPath in assembly := new File("output/logdata-demo.jar")
我在Scala 2.11.6
上尝试过,一切正常。 可以连接到Scala版本。
最佳操作是将其更新为2.11.x
如果您坚持使用2.10
,则可以尝试2.10.5
。
scala> :paste
// Entering paste mode (ctrl-D to finish)
println(scala.tools.nsc.Properties.versionString)
val p1 = "ab*c".r
val p2 = "a(b*)c".r
val p1Matches = "abbbc" match {
case p1() => true
case _ => false
}
// Exiting paste mode, now interpreting.
version 2.11.6
p1: scala.util.matching.Regex = ab*c
p2: scala.util.matching.Regex = a(b*)c
p1Matches: Boolean = true
我在Scala 2.10.4
尝试了此代码,并且效果很好。
您应该尝试通过以下方式获取Scala版本,以确保您使用的是2.10.4
:
scala.util.Properties.scalaPropOrElse("version.number", "unknown")
val p1 = "ab*c".r
val p2 = "a(b*)c".r
val p1Matches = "abbbc" match {
case p1() => true
case _ => false
}
这是由于类文件放置不当引起的。 在构建时,它们位于scala 2.11文件夹中。 将它们移至scala-2.10文件夹可解决此问题。
SBT很奇怪
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.