Как я могу определить анонимную универсальную функцию Scala?

Скажем, у меня есть это:

val myAnon:(Option[String],String)=>String = (a:Option[String],defVal:String) => {
  a.getOrElse(defVal)
}

Не возражайте против того, что делает функция. Имеет ли так или иначе создание его универсален, таким образом, у меня может быть Опция [T]?

15
задан Ben Lings 31 March 2010 в 21:59
поделиться

2 ответа

Я не думаю, что анонимные функции могут иметь параметры типа. См. этот ответ для подробностей.

7
ответ дан 1 December 2019 в 04:27
поделиться

Подведем итог этому ответу: нет, вы не можете сделать анонимные функции универсальными, но вы можете явно определить свою функцию как класс, который расширяет одну из черт Function0, Function1, Function2 и т. д. и определяет функцию apply на основе этих черт. Тогда определяемый вами класс может быть универсальным. Вот отрывок из исходной статьи, доступной здесь :

scala> class myfunc[T] extends Function1[T,String] {
     |     def apply(x:T) = x.toString.substring(0,4)
     | }
defined class myfunc

scala> val f5 = new myfunc[String]
f5: myfunc[String] = <function>

scala> f5("abcdefg")
res13: java.lang.String = abcd

scala> val f6 = new myfunc[Int]
f6: myfunc[Int] = <function>

scala> f6(1234567)
res14: java.lang.String = 1234
8
ответ дан 1 December 2019 в 04:27
поделиться
Другие вопросы по тегам:

Похожие вопросы: