Scala方法具有重载的多个参数组

时间:2015-07-21 22:33:05

标签: scala overloading

尝试使用多个参数组重载方法,其中第二个参数类型不同似乎不起作用。这不会编译:

class Foo {
  def boo(a: String)(b: String): Unit = ()
  def boo(a: String)(b: Int): Unit = boo(a)(b.toString)
}

我原以为它会被编译成boo(String, String)boo(String,Int)方法,因此可以在JVM中使用。但我猜不是。

我正在寻找的是一种解决方法 - 我希望保留参数组和重载名称,使其对调用者透明,但欢迎任何其他黑客。

2 个答案:

答案 0 :(得分:2)

您可以拥有一个具有重载apply方法的中间层:

object Foo {
    def boo(a: String) = BooMaker(a)
    case class BooMaker(a: String) {
        def apply(b: String): Unit = ()
        def apply(b: Int): Unit = apply(b.toString)
    }
}

这将允许您拨打Foo.boo("a")("b")Foo.boo("a")(1),但会引入可能不受欢迎的中间层。

答案 1 :(得分:1)

需要咖喱吗?由于部分应用程序,它不会编译。以下应该编译得很好。

Error: Authentication strategy simple uses unknown scheme: bearer-access-token
    at Object.exports.assert (/Users/jamshidnafisi/Documents/srvs-node/node_modules/hapi/node_modules/hoek/lib/index.js:723:11)
    at internals.Auth.strategy (/Users/jamshidnafisi/Documents/srvs-node/node_modules/hapi/lib/auth.js:44:10)
    at internals.Plugin._applyChild (/Users/jamshidnafisi/Documents/srvs-node/node_modules/hapi/lib/plugin.js:471:19)
    at Object.auth.strategy (/Users/jamshidnafisi/Documents/srvs-node/node_modules/hapi/lib/plugin.js:69:18)
    at /Users/jamshidnafisi/Documents/srvs-node/index.js:78:17
    at done (/Users/jamshidnafisi/Documents/srvs-node/node_modules/hapi/node_modules/items/lib/index.js:30:25)
    at Object.exports.register (/Users/jamshidnafisi/Documents/srvs-node/node_modules/hapi-auth-bearer-token/lib/index.js:73:5)
    at /Users/jamshidnafisi/Documents/srvs-node/node_modules/hapi/lib/plugin.js:254:14
    at iterate (/Users/jamshidnafisi/Documents/srvs-node/node_modules/hapi/node_modules/items/lib/index.js:35:13)
    at Object.exports.serial (/Users/jamshidnafisi/Documents/srvs-node/node_modules/hapi/node_modules/items/lib/index.js:38:9)
    at internals.Plugin.register (/Users/jamshidnafisi/Documents/srvs-node/node_modules/hapi/lib/plugin.js:236:11)
    at Object.<anonymous> (/Users/jamshidnafisi/Documents/srvs-node/index.js:76:11)
    at Module._compile (module.js:460:26)
    at Object.Module._extensions..js (module.js:478:10)

如果您可以为实际用例提供更多背景信息,那么可能有助于提供更好的答案。