4

我正在试验Scala Macros,它是 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 编译的相同代码运行良好。

4

1 回答 1

7

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

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 版本之间缺乏二进制兼容性。

于 2012-11-12T01:01:16.787 回答