我如何在Scala中执行此操作?

时间:2011-02-06 22:11:04

标签: java scala

所以,我今天刚开始学习Scala,并且表现相当不错,但是我遇到了这个问题......

我需要在Scala中执行此操作,但我无法将其整理出来:

final Filter<GameObject> filter = new Filter<GameObject>() {
    public boolean accept(GameObject o) {
        ...
    }
};

ATM我有,但它甚至不会编译:

val filter = new Filter[GameObject] {
    override def accept(o: GameObject) {
        ...
    }
}

提前致谢。

编辑:

到目前为止,这是整个对象:

object Targeter extends LoopTask {

  val filter = new Filter[GameObject] {
    override def accept(o: GameObject) = { true }
  }

  //  Overriding a method in the LoopTask class
  override def loop() = {
    100
  }
}

4 个答案:

答案 0 :(得分:7)

我认为你错过了返回类型:

override def accept(o: GameObject) = {...}

override def accept(o: GameObject): Boolean = {...}

这两个变体是相同的(假设您实际上在此方法的主体中返回了一些布尔值)。


如果您定义accept这样的方法:

override def accept(o: GameObject) {...}

然后它与:

相同
override def accept(o: GameObject): Unit = {...}

Unit相当于java中的void

答案 1 :(得分:5)

尽量将Scala中编写的代码保留为惯用语,一个方便的转换器函数将在这里提供帮助:

def gameFilter[T](fn: T => Boolean) = new Filter[T] {
  override def accept(x: T) = fn(x)
}

然后可以用作:

val filter = gameFilter[GameObject](_ => true)

或者,如果您只过滤GameObject s:

def gameFilter(fn: GameObject => Boolean) = new Filter[GameObject] {
  override def accept(x: GameObject) = fn(x)
}

val filter = gameFilter( _ => true )

答案 2 :(得分:1)

override def accept(o: GameObject) {

应该是

override def accept(o: GameObject) = {

..这是标准初学者的错误。此外,声明返回类型会更安全:

override def accept(o: GameObject):Boolean = {

您知道我认为您可以使用功能替换过滤器:

val myFilter : GameObject => Boolean = ...

然后你可以做这样的事情:

val gameObjects:List[GameObject] = ...
val filteredGameObjects = gameObjects filter myFilter

答案 3 :(得分:0)

假设其他类是:

,“到目前为止整个对象”编译得很好
  abstract class LoopTask {
    def loop(): Int
  }

  case class GameObject

  abstract class Filter[T] {
      def accept(o:T):Boolean
  }
相关问题