scala - Can we have an array of by-name-parameter functions? -


in scala have by-name-parameters can write

def foo[t](f: => t):t = {    f // invokes f     } // use as: foo(println("hello")) 

i want same array of methods, want use them as:

def foo[t](f:array[ => t]):t = {     // not work    f(0) // invokes f(0)              // not work } foo(println("hi"), println("hello")) // not work 

is there way want? best have come is:

def foo[t](f:() => t *):t = {    f(0)() // invokes f(0)     } // use as: foo(() => println("hi"), () => println("hello")) 

or

def foo[t](f:array[() => t]):t = {     f(0)() // invokes f(0)     } // use as:  foo(array(() => println("hi"), () => println("hello"))) 

edit: proposed sip-24 not useful pointed out seth tisue in comment this answer.

an example problematic following code of utility function trycatch:

type unittot[t] = ()=>t def trycatch[t](list:unittot[t] *):t = list.size match {   case if > 1 =>      try list.head()     catch { case t:any => trycatch(list.tail: _*) }   case 1 => list(0)()   case _ => throw new exception("call list must non-empty") } 

here trycatch takes list of methods of type ()=>t , applies each element successively until succeeds or end reached.

now suppose have 2 methods:

def getyahoorate(currencya:string, currencyb:string):double = ??? 

and

def getgooglerate(currencya:string, currencyb:string):double = ??? 

that convert 1 unit of currencya currencyb , output double.

i use trycatch as:

val usdeurorate = trycatch(() => getyahoorate("usd", "eur"),                             () => getgooglerate("usd", "eur")) 

i have preferred:

val usdeurorate = trycatch(getyahoorate("usd", "eur"),                             getgooglerate("usd", "eur")) // not work 

in example above, getgooglerate("usd", "eur") invoked if getyahoorate("usd", "eur") throws exception. not intended behavior of sip-24.

as of scala 2.11.7, answer no. however, there sip-24, in future version f: => t* version may possible.


Comments

Popular posts from this blog

resizing Telegram inline keyboard -

command line - How can a Python program background itself? -

php - "cURL error 28: Resolving timed out" on Wordpress on Azure App Service on Linux -