Как отмечает om-nom-nom, преобразование методов в функции называется «частичным применением». Он может быть явно выражен, используя символы подчеркивания (s) как «аргументы» для метода или автоматически компилятором, когда доступной информации типа достаточно для того, чтобы сделать вывод о том, что имя метода, используемое в месте, где требуется функция, может быть частично применяется для получения требуемой функции.
Теперь для вашего кода. Как написано, результатом вызова fun(new A())
является Function1[Unit, Unit]
. Вы должны были бы apply
, которые функционируют, чтобы получить println
вызывается
// Exiting paste mode, now interpreting.
defined class A
defined module Main
scala> Main.main(Array())
scala> def doIt { val fun = (_: A).m _; fun(new A())() }
doIt: Unit
scala> doIt
m()
Это называется * частично применяется функция *, пожалуйста, см http://blog.sanaulla.info/2010/12/25/partially-applied -functions-in-scala/для деталей –
Это для меня новое: '(_: A) .m' – sourcedelica
' (_: A) .m' '' A => Unit' и '(_: A) .m _' is 'A => (() => Unit)' – sourcedelica