Scala 2.10.0 RC2 и дополнительные параметры

Я экспериментирую с макросами Scala, которые являются частью Scala 2.10, но когда я пытаюсь скомпилировать (используя sbt), я получаю следующую ошибку:

[error] .../API.scala:9: not enough arguments for constructor OAuth:
(requestMethod: String, consumerSecret: String, consumerKey: String,
signatureMethod: String, version: String)jm.oauth.OAuth
[error]   private val oauth = new OAuth(OAuth.POST, oauthConsumerSecret,
oauthConsumerKey, OAuth.HMAC_SHA1)

Вы можете найти реализацию OAuth класс здесь.

Есть ли несовместимость между scala 2.10 и дополнительными параметрами?

Тот же самый код, скомпилированный с Scala 2.9.1, работал отлично.

1 ответ

Решение

Если вы создаете файл, содержащий только это определение класса:

class Optional(x: Int = 0)

Затем скомпилируйте его с Scala 2.9.2 и запустите javap в полученном классе вы увидите это:

public class Optional implements scala.ScalaObject {
  public static final int init$default$1();
  public Optional(int);
}

Скомпилируйте его снова с 2.10.0-RC2 и javap это, и вы получите это вместо:

public class Optional {
  public static int $lessinit$greater$default$1();
  public Optional(int);
}

Так что нет, аргументы по умолчанию в 2.10 прекрасно подходят, вы просто натолкнулись на конкретный пример отсутствия бинарной совместимости между основными версиями Scala.

Другие вопросы по тегам