[英]How to invokePrivate on a function with implicit parameters
如何為這些類調用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](invocation : PrivateMethodTester.this.Invocation[T])
其中args
是序列:
final class Invocation[T](val methodName : scala.Symbol, val args : scala.Any*)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.