【发布时间】:2015-01-25 09:16:41
【问题描述】:
你能做一个匿名验证吗?
我正在考虑做这样的事情:
case class NumIterations[A](num: Int)
case class Seed[A](seed: A)
case class Manipulate[A](f: A => A)
. . .
def funcWithGobsOfImplicitArgs[A](
implicit numIterations: NumIterations[A],
seed: Seed[A],
manipulate: Manipulate[A],
. . .
): A = . . .
def apply(): String = {
implicit val NumIterations[String](10) // This is where I want anonymous vals
implicit val Seed("xyz")
. . .
funcWithGobsOfImplicitArgs
}
好的,将函数的参数所有设为隐式可能有点过火,但我确实有一个真实的应用程序,可以方便地将一些函数参数粘贴在范围内,然后重新使用和覆盖它们。这使得对该功能的试验非常方便。我可以一次显式地使用一个参数,而让所有其他参数隐式地提供。
在这种情况下,最好不要为 val 命名,因为名称会占据您的脑海,而 val 的完整含义仅由其类型提供。当我只有其中一个 val 时,我将其命名为 _,认为 Scala 会将其视为永远不会被显式引用的 val。但是当我将两个 val 命名为 _ 时,Scala 抱怨了。
【问题讨论】:
-
为什么不直接在函数参数中命名 vals,即
implicit val seed = Seed("xyz")? -
@OlegGrenrus 实际上,这就是我一直在做的事情。我可以忍受它。不过,这似乎不是多余的吗?