Scala 如何在具有隐式参数的函数上调用Private

Scala 如何在具有隐式参数的函数上调用Private,scala,Scala,如何为这些类调用XYZ.doSomething方法: XYZ.scala object XYZ { private def doSomething(i : Int)(implicit s: String): String { s + i.toString } } XYZTest.scala class XYZTest extends FunSpec with PrivateMethodTester { describe("SomeTest") { it("Can'

如何为这些类调用XYZ.doSomething方法:

XYZ.scala

object XYZ {

  private def doSomething(i : Int)(implicit s: String): String {
    s + i.toString
  }
}
XYZTest.scala

class XYZTest extends FunSpec with PrivateMethodTester {
  describe("SomeTest") {
    it("Can't find a private method named: doSomething :( ") {
      implicit lazy val someStr: String = "sahil"
      val doSomething = PrivateMethod[String]('doSomething)
      val myStr = XYZ invokePrivate doSomething(1)
      assert(myStr == "sahil1")
    }
  }
  describe("SomeTest") {
    it("This doesn't even compile :( ") {
      val doSomething = PrivateMethod[String]('doSomething)
      val myStr = XYZ invokePrivate doSomething(1)("sahil")
      assert(myStr == "sahil1")
    }
  }
}
正确答案是:

object XYZ {

  private def doSomething(i : Int)(implicit s: String): String = {
    s + i.toString
  }
}

class XYZTest extends FunSpec with PrivateMethodTester {
  describe("SomeTest") {
    it("Can't find a private method named: doSomething :( ") {
      implicit lazy val someStr: String = "sahil"
      val doSomething = PrivateMethod[String]('doSomething)
      val myStr = XYZ invokePrivate doSomething(1, someStr)
      assert(myStr == "sahil1")
    }
  }
}
invokePrivate
方法的简要视图显示,它不支持
implicits
,但看起来它将
currying
参数列表视为参数的一般序列

def invokePrivate[T](调用:PrivateMethodTester.this.invoke[T])

其中,
args
是顺序:

最终类调用[T](val-methodName:scala.Symbol,val-args:scala.Any*)