Неявные параметры конструктора

Итак, я впервые попытался работать с неявными параметрами и переменными, и это отлично работает

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 {...}