Scala 2.10.0 RC2和可选参数

mar*_*gio 4 scala

我正在尝试使用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)
Run Code Online (Sandbox Code Playgroud)

您可以在此处找到OAuth该类的实现.

scala 2.10和可选参数之间是否存在任何不兼容性?

使用scala 2.9.1编译的完全相同的代码完美无缺.

Tra*_*own 7

如果创建仅包含此类定义的文件:

class Optional(x: Int = 0)
Run Code Online (Sandbox Code Playgroud)

然后用Scala 2.9.2编译它并javap在生成的类上运行,你会看到:

public class Optional implements scala.ScalaObject {
  public static final int init$default$1();
  public Optional(int);
}
Run Code Online (Sandbox Code Playgroud)

用2.10.0-RC2再次编译它javap,然后你得到它:

public class Optional {
  public static int $lessinit$greater$default$1();
  public Optional(int);
}
Run Code Online (Sandbox Code Playgroud)

所以不,默认参数在2.10中完全没问题,你只是遇到了主要Scala版本之间缺乏二进制兼容性的具体例子.

  • 我会说"*major*Scala版本之间缺乏二进制兼容性",比如2.10.x和2.9.x. 次要版本应该与源代码和二进制版本兼容,它们的前身属于同一主要版本,例如2.9.2可以代替2.9.1而无需重新编译任何内容. (2认同)