Как я могу получить Функциональные объекты из методов в Scala?

Предположим, что у меня есть простой класс в Scala:

class Simple {
  def doit(a: String): Int = 42
}

Как я могу сохранить в val Function2 [Простой, Строка, Интервал], который берет два аргумента (целевой Простой объект, Аргумент строки), и может звонить, мелкая монета () получают меня результат назад?

9
задан Jean-Philippe Pellet 13 July 2010 в 15:00
поделиться

3 ответа

val f: Function2[Simple, String, Int] = _.doit(_)
14
ответ дан 4 December 2019 в 06:40
поделиться

то же, что и sepp2k, только используется другой синтаксис

val f = (s:Simple, str:String) => s.doit(str)
12
ответ дан 4 December 2019 в 06:40
поделиться

Для тех из вас, кто не любит печатать типы:

scala> val f = (_: Simple).doit _
f: (Simple) => (String) => Int = <function1>

Следование методу _ работает для любой арности:

scala> trait Complex {                        
     |    def doit(a: String, b: Int): Boolean
     | }                                      
defined trait Complex

scala> val f = (_: Complex).doit _            
f: (Complex) => (String, Int) => Boolean = <function1>

Это покрывается комбинацией §6.23 "Синтаксис заполнителя" для анонимных функций »и §7.1« Значения методов »в Справочник по Scala

9
ответ дан 4 December 2019 в 06:40
поделиться
Другие вопросы по тегам:

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