scala> val count = 7
count: Int = 7
Run Code Online (Sandbox Code Playgroud)
将它放入XML属性会产生错误:
scala> val x = <element count={count}/>
<console>:8: error: overloaded method constructor UnprefixedAttribute with alternatives:
(key: String,value: Option[Seq[scala.xml.Node]],next: scala.xml.MetaData)scala.xml.UnprefixedAttribute <and>
(key: String,value: String,next: scala.xml.MetaData)scala.xml.UnprefixedAttribute <and>
(key: String,value: Seq[scala.xml.Node],next1: scala.xml.MetaData)scala.xml.UnprefixedAttribute
cannot be applied to (java.lang.String, Int, scala.xml.MetaData)
val x = <element count={count}/>
Run Code Online (Sandbox Code Playgroud) 我试图用来readInt()从同一行读取两个整数,但这不是它的工作原理.
val x = readInt()
val y = readInt()
Run Code Online (Sandbox Code Playgroud)
输入1 727我在运行时得到以下异常:
Exception in thread "main" java.lang.NumberFormatException: For input string: "1 727"
at java.lang.NumberFormatException.forInputString(NumberFormatException.java:65)
at java.lang.Integer.parseInt(Integer.java:492)
at java.lang.Integer.parseInt(Integer.java:527)
at scala.collection.immutable.StringLike$class.toInt(StringLike.scala:231)
at scala.collection.immutable.StringOps.toInt(StringOps.scala:31)
at scala.Console$.readInt(Console.scala:356)
at scala.Predef$.readInt(Predef.scala:201)
at Main$$anonfun$main$1.apply$mcVI$sp(Main.scala:11)
at scala.collection.immutable.Range.foreach$mVc$sp(Range.scala:75)
at Main$.main(Main.scala:10)
at Main.main(Main.scala)
Run Code Online (Sandbox Code Playgroud)
我通过使用程序工作,readf但对我来说似乎很尴尬和丑陋:
val (x,y) = readf2("{0,number} {1,number}")
val a = x.asInstanceOf[Int]
val b = y.asInstanceOf[Int]
println(function(a,b))
Run Code Online (Sandbox Code Playgroud)
有人建议我只使用Java的Scanner类,(Scanner.nextInt())但是在Scala中有一个很好的惯用方法吗?
编辑:我的解决方案遵循范例的例子:
val Array(a,b) = readLine().split(" ").map(_.toInt)
Run Code Online (Sandbox Code Playgroud)
后续问题:如果字符串中有多种类型,您将如何提取它?(说一个单词,一个int和一个百分比作为Double)
我正在尝试折叠选项列表,以便返回第一个(或最后一个)某些值或如果没有任何某些值则返回None.
scala> val opts = List(None, Some(1), None, Some(2), None)
opts: List[Option[Int]] = List(None, Some(1), None, Some(2), None)
scala> opts foldLeft(None)((a,io) => a match { case None => io; case Some(i) =>
a})
<console>:9: error: object None does not take parameters
opts foldLeft(None)((a,io) => a match { case None => io; case Some
(i) => a})
^
Run Code Online (Sandbox Code Playgroud)
不知道我做错了什么.也许有一种方法可以使用更高阶函数更简单地做到这一点,但这里没有任何东西引起了我的注意.