Reputation: 1
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
Reputation: 13221
Make a "tupled" function, just like in Assen Kolov's answer:
def func(d1: Boolean, d2: Boolean, d3: Boolean, d4: Boolean) = ???
val f = func _
then create a tuple from your Seq
. This answer shows how to do it in a type-safe way.
And call your function f
with a tuple argument.
Upvotes: 0
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
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
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