1.相当于List的泛形是元祖( List [ Tuple [ (K,V),(K,V) ] ] )

image.png

2.搭配 :_*

image.png

3 :_* 详解

https://blog.csdn.net/m037692438/article/details/71171732?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522165276634216781435441662%2522%252C%2522scm%2522%253A%252220140713.130102334.pc%255Fall.%2522%257D&request_id=165276634216781435441662&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~all~first_rank_ecpm_v1~rank_v31_ecpm-5-71171732-null-null.142^v10^pc_search_result_control_group,157^v4^control&utm_term=Scala+%3A+*&spm=1018.2226.3001.4187

函数内部,重复参数的类型是声明参数类型的数组。
因此, echo 函数里被声明为类型“ String* ”的 args 的类型实际上是 Array[String] 。
然而,如果你有一个合适类型的数组,并尝试把它当作
重复参数传入,你会得到一个编译器错误:

  1. scala> val arr = Array("What's", "up", "doc?")
  2. arr: Array[java.lang.String] = Array(What's, up, doc?)
  3. scala> echo(arr)
  4. <console>:7: error: type mismatch;
  5. found : Array[java.lang.String]
  6. required: String
  7. echo(arr)

要实现这个做法,你需要在数组参数后添加一个冒号和一个 _* 符号,像这样:

  1. scala> echo(arr: _*)
  2. What's
  3. up
  4. doc?

这个标注告诉编译器把 arr 的每个元素当作参数,而不是当作单一的参数传给 echo 。

  1. def sum(args: Int*):Int={
  2. var total:Int=0
  3. for (arg <- args) {
  4. total=total+arg
  5. }
  6. total
  7. }
  8. val s = sum(1 to 5:_*)


4.Scala 和 Java对比

Scala中必须要加 _:*
image.png

Java中可以
image.png