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.