我喜欢让我的代码非常天真可读.
如果我设置一个简单的元组列表:
scala> val a = List(6, 8, 10)
a: List[Int] = List(6, 8, 10)
scala> val b = a zipWithIndex
b: List[(Int, Int)] = List((6,0), (8,1), (10,2))
Run Code Online (Sandbox Code Playgroud)
我想在List上映射(),但我发现._1 ._2语法有点难以阅读:
scala> val c = b map ( a => if(a._1 > 8) a._1 else a._2 )
c: List[Int] = List(0, 1, 10)
Run Code Online (Sandbox Code Playgroud)
为了"命名"元组,我用过:
scala> val c = b map ( { case (num, i) => if(num > 8) num else i } )
c: List[Int] = List(0, 1, 10)
Run Code Online (Sandbox Code Playgroud)
两个问题: …
我想将带有布尔值的scala映射转换为带有java.lang.Boolean值的java映射(用于互操作性).
import scala.collection.JavaConversions._
val a = Map[Int, Boolean]( (1, true), (2, false) )
val b : java.util.Map[Int, java.lang.Boolean] = a
Run Code Online (Sandbox Code Playgroud)
失败了:
error: type mismatch;
found : scala.collection.immutable.Map[Int,scala.Boolean]
required: java.util.Map[Int,java.lang.Boolean]
val b : java.util.Map[Int, java.lang.Boolean] = a
Run Code Online (Sandbox Code Playgroud)
JavaConversions隐式转换很适合在相同类型上参数化的容器,但不知道Boolean和java.lang.Boolean之间的转换.
我可以使用JavaConversions魔术来执行此转换,还是有一个简洁的语法来执行转换而不使用该包中的隐式转换?
我正在为对象中的简单数据访问器构建枚举条目的映射.以下是使用Int作为关键字的示例(来自解释器):
class Obj(a: Int, b: Int) {
def getA = a
def getB = b
}
val m : Map[Int, (Obj) => Int] = Map(
(2, (o: Obj) => o.getA)
);
val d = m(2)(new Obj(3,4))
Run Code Online (Sandbox Code Playgroud)
这工作正常,但是必须在每个映射值的参数中明确地使用:Obj类型编写函数似乎是不必要的:
(o: Obj) => o.getA
Run Code Online (Sandbox Code Playgroud)
是否有更严格的语法我错过了?