Scala:Array,List,Seq to argument function

时间:2017-07-15 15:34:01

标签: scala

如何实现自动化? (将数组的元素插入函数的参数中)


def func(d1: Boolean, d2: Boolean, d3: Boolean, d4: Boolean) = ???

val data = Array(true, true, false, false)

func(
  data(0),
  data(1),
  data(2),
  data(3)
)

4 个答案:

答案 0 :(得分:1)

您可以使用' splat'运算符与varargs参数:

def func(args : Boolean*) = {
  args foreach println
}

val data = Array(true, true, false, false)

func(data: _*)

答案 1 :(得分:1)

如果我没有正确地解决你的问题:

def func(d: Boolean*) = {
  d.map( if (_) "yes" else "no" ).foreach(println)
}

val data = Array(true, true, false, false)

func(data: _*)
yes
yes
no
no

答案 2 :(得分:0)

如果您设法将列表转换为元组:

scala> def func(d1: Boolean, d2: Boolean, d3: Boolean, d4: Boolean) = s"$d1 $d2 $d3 $d4"
func: (d1: Boolean, d2: Boolean, d3: Boolean, d4: Boolean)String

scala> val ff = func _
ff: (Boolean, Boolean, Boolean, Boolean) => String = $$Lambda$1151/1744486549@5a13f1f7

scala> val data = (true,false,true,true)
data: (Boolean, Boolean, Boolean, Boolean) = (true,false,true,true)

scala> ff.tupled(data)
res8: String = true false true true

答案 3 :(得分:0)

  1. 制作一个“tupled”功能,就像在Assen Kolov的回答中一样:

    def func(d1: Boolean, d2: Boolean, d3: Boolean, d4: Boolean) = ???
    
    val f = func _
    
  2. 然后从Seq创建一个元组。此answer显示了如何以类型安全的方式执行此操作。

  3. 使用元组参数调用函数f