У меня есть код на Scala, который делает что-то изящное с двумя разными версиями функции с параметризацией типа. Я сильно упростил это из своего приложения, но, в конце концов, мой код полон вызовов формы w(f[Int],f[Double])
, где w()
— мой волшебный метод. Я хотел бы иметь более волшебный метод, такой как z(f) = w(f[Int],f[Double])
, но я не могу заставить работать какой-либо синтаксис, такой как z(f[Z]:Z->Z)
, поскольку он выглядит (для меня), как аргументы функции не могут иметь свои собственные параметры типа. Вот проблема в виде фрагмента кода Scala.
Любые идеи? Это может сделать макрос, но я не думаю, что это часть 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)
}
}