为什么Scala可以';t不带括号和圆点的推断方法类型

为什么Scala可以';t不带括号和圆点的推断方法类型,scala,scala-collections,Scala,Scala Collections,我编写了一段简单的代码,它以向量的形式返回字符及其索引的不可变映射: def indexes(string: String): Map[Char, Vector[Int]] = (0 until string.length). foldLeft(Map[Char, Vector[Int]]()){ (m, i) => m + (string(i) -> m.getOrElse(string(i), Vector()).:+(i)) } 例如: println(ind

我编写了一段简单的代码,它以向量的形式返回字符及其索引的不可变映射:

def indexes(string: String): Map[Char, Vector[Int]] = (0 until string.length).
  foldLeft(Map[Char, Vector[Int]]()){
    (m, i) => m + (string(i) -> m.getOrElse(string(i), Vector()).:+(i))
  }
例如:

println(indexes("Mississippi"))
// Map(M -> Vector(0), i -> Vector(1, 4, 7, 10), s -> Vector(2, 3, 5, 6), p -> Vector(8, 9))

为什么Scala不能推断
m.getOrElse(string(i),Vector()):+i
Vector[Int]
并编译它?我应该写
m.getOrElse(string(I),Vector())。:+(I)

如果地图值用括号括起来就可以了:

def indexes(string: String): Map[Char, Vector[Int]] = (0 until string.length).
  foldLeft(Map[Char, Vector[Int]]()){
    (m, i) => m + (string(i) -> (m.getOrElse(string(i), Vector()) :+ i))
  }

indexes("Mississippi")
// res1: Map[Char,Vector[Int]] = Map(M -> Vector(0), i -> Vector(1, 4, 7, 10), s -> Vector(2, 3, 5, 6), p -> Vector(8, 9))
在不插入映射值的情况下,下面代码的
(k->a:+b)
键值部分将被视为
(k->a):+b,因此会导致编译错误:

    (m, i) => m + (string(i) -> m.getOrElse(string(i), Vector()) :+ i)

// <console>:28: error: value :+ is not a member of (Char, Vector[Int])
(m,i)=>m+(字符串(i)->m.getOrElse(字符串(i),向量()):+i)
//:28:错误:值:+不是(Char,Vector[Int]的成员