Могу ли я определить безымянный метод в классе Scala? - PullRequest
2 голосов
/ 22 октября 2010

Возможно ли достичь? Если да, пожалуйста, исправьте мой синтаксис объявления Foo.


class Foo (...) {
...
  def /* the nameless method name implied here */ (...) : Bar = new Bar (...)
...
}

class Bar (...) {
...
}

val foo : Foo = new Foo (...)

val fooBar : Bar = foo (...)


Ответы [ 3 ]

12 голосов
/ 22 октября 2010

Вы должны использовать метод apply:

class Foo (y: Int) {
  def apply(x: Int) : Int = x + y
}


val foo : Foo = new Foo (7)

val fooBar  = foo (5)

println(fooBar)

Затем запустите код:

bash$ scala foo.scala 
12
4 голосов
/ 22 октября 2010

Вы можете расширить Function0[Bar] и внедрить def apply: Bar.См Function0:

 object Main extends Application {
   val currentSeconds = () => System.currentTimeMillis() / 1000L
   val anonfun0 = new Function0[Long] {
     def apply(): Long = System.currentTimeMillis() / 1000L
   }
   println(currentSeconds())
   println(anonfun0())
 }
4 голосов
/ 22 октября 2010

Я думаю, что использование 'apply' для вашего имени метода должно работать следующим образом.

...