所以,我今天刚开始学习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
}
}
答案 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
}