所以我第一次尝试使用隐式参数和变量,这是完全正常的
class Test(implicit val a: Int) {
bar(5)
def bar(c: Int)(implicit d: Int): Unit = {
println(d)
}
}
然后我在一些更复杂的代码中尝试了它
class GameScreen(val game : Game)(implicit val batch: SpriteBatch, implicit val world: World, implicit val manager: AssetManager) extends Screen {
val camera : OrthographicCamera = new OrthographicCamera
createOpenGLStuff()
createMap()
def createMap(implicit w : World) : Unit =
{
}
但现在我收到了错误
- not enough arguments for method createMap: (implicit w:
com.badlogic.gdx.physics.box2d.World)Unit. Unspecified value parameter w.
我不知道为什么这不起作用,我可以写
createMap(this.world)
一切都很好,但是因为this.world是隐含的(我认为?)我不应该在那里指定它。我在做什么/理解错误在这里?
答案 0 :(得分:11)
你需要丢弃parens
class GameScreen(val game : Game)(implicit val batch: SpriteBatch, implicit val world: World, implicit val manager: AssetManager) extends Screen {
val camera : OrthographicCamera = new OrthographicCamera
createOpenGLStuff()
createMap //this works
def createMap(implicit w : World) : Unit =
{
}
然而,createMap方法必须执行一些副作用,所以不用parens调用它并不是一件好事。
我建议改为:
def createMap()(implicit w : World) : Unit = {
...
}
这样,您可以维护原始调用语法:createMap()
答案 1 :(得分:1)
此外,您只需要在参数列表的开头使用隐式关键字:
class GameScreen(val game : Game)(implicit val batch: SpriteBatch, val world: World, val manager: AssetManager) extends Screen {...}