Неявные параметры конструктора
Итак, я впервые попытался работать с неявными параметрами и переменными, и это отлично работает
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 подразумевается (я думаю?), мне не нужно указывать его там. Что я делаю/понимаю здесь неправильно?
Ответы
Ответ 1
Вам нужно отбросить 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 должен выполнять некоторые побочные эффекты, поэтому называть его без парнеров не очень-то хорошо.
Я предлагаю изменить на:
def createMap()(implicit w : World) : Unit = {
...
}
Таким образом, вы можете сохранить исходный синтаксис вызова: createMap()
Ответ 2
Кроме того, вам нужно только неявное ключевое слово в начале списка параметров:
class GameScreen(val game : Game)(implicit val batch: SpriteBatch, val world: World, val manager: AssetManager) extends Screen {...}