Ho un codice Scala che fa qualcosa di carino con due diverse versioni di una funzione parametrizzata per tipo. L'ho semplificato molto dalla mia applicazione ma alla fine il mio codice pieno di chiamate del modulo w(f[Int],f[Double])
dove il mio metodo magico è w()
. Mi piacerebbe avere un metodo più magico come z(f) = w(f[Int],f[Double])
- ma non riesco a ottenere alcuna sintassi come z(f[Z]:Z->Z)
per funzionare come sembra (per me) come argomenti di funzione non possono avere i propri parametri di tipo. Ecco il problema come snippet di codice Scala.Può Scala consentire parametri di tipo libero negli argomenti (sono i parametri di tipo Scala I cittadini di prima classe?)?
Qualche idea? Una macro potrebbe farlo, ma non penso che quelli facciano parte di Scala.
object TypeExample {
def main(args: Array[String]):Unit = {
def f[X](x:X):X = x // parameterize fn
def v(f:Int=>Int):Unit = { } // function that operates on an Int to Int function
v(f) // applied, types correct
v(f[Int]) // appplied, types correct
def w[Z](f:Z=>Z,g:Double=>Double):Unit = {} // function that operates on two functions
w(f[Int],f[Double]) // works
// want something like this: def z[Z](f[Z]:Z=>Z) = w(f[Int],f[Double])
// a type parameterized function that takes a single type-parameterized function as an
// argument and then speicalizes the the argument-function to two different types,
// i.e. a single-argument version of w() (or wrapper)
}
}
Si desidera parametrizzare l'argomento di z? –
Sì, vorrei che l'argomento di z() fosse una funzione parametrizzata (come la mia f) e quindi avere z() associare il parametro type a due valori diversi. – jmount
Ciò che sarebbe totalmente rock sarebbe una sorta di funzione che prenderebbe una funzione parametrizzata f e restituirà una classe con un membro impostato su f [Int] e l'altro su f [Double]. – jmount