如何为这些类调用 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
方法的简要 View 表明它不支持隐式
,但看起来它将currying
参数列表视为一般参数序列
def invokePrivate[T](调用:PrivateMethodTester.this.Invocation[T])
其中 args
是序列:
最终类 Invocation[T](val methodName : scala.Symbol, val args : scala.Any*)
关于scala - 如何在具有隐式参数的函数上调用 Private,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34172387/