Scala 如何在具有隐式参数的函数上调用Private
如何为这些类调用XYZ.doSomething方法: XYZ.scalaScala 如何在具有隐式参数的函数上调用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'
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*)