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

标签 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'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/

相关文章:

scala - 在 SBT 中重命名程序集生成的 uberjar

scala - 分页 Play 路线的最佳做法?

scala - 从 Scala 文件创建可执行 jar 的问题

scala - 通过字符串将 List[String] 拆分为单独的列表

scala - Scala 中的多行函数文字作为参数

scala自类型: member of type parameter error

scala - 将Spark插入Java堆空间

java - 为什么在 Java 中不需要创建这些 json 读/写?

java - 使用 Scala 在 .zip 文件夹中创建一个新文件

java - Intellij Java/Scala : Delete to delimiter?(如 Emacs Paredit)