Daedro
Daedro

Reputation: 1

Scala: Array, List, Seq to argument function

How can this be automated? (Insert the elements of the array into the arguments of the function)


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)
)

Upvotes: 0

Views: 652

Answers (4)

Alexander Azarov
Alexander Azarov

Reputation: 13221

  1. Make a "tupled" function, just like in Assen Kolov's answer:

    def func(d1: Boolean, d2: Boolean, d3: Boolean, d4: Boolean) = ???
    
    val f = func _
    
  2. then create a tuple from your Seq. This answer shows how to do it in a type-safe way.

  3. And call your function f with a tuple argument.

Upvotes: 0

Assen Kolov
Assen Kolov

Reputation: 4403

If you manage to convert your list to a tuple:

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

Upvotes: 0

Leo C
Leo C

Reputation: 22449

If I undestand your question correctly:

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

Upvotes: 2

sheunis
sheunis

Reputation: 1544

You can use the 'splat' operator with a varargs argument:

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

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

func(data: _*)

Upvotes: 1

Related Questions