Можете ли вы сделать анонимный val?Предоставляет ли Scala способ анонимного val?
Я имею в виду сделать что-то вроде этого:
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 предоставляется только его типом. Когда у меня был только один из этих vals, я назвал его _
, считая, что Scala будет относиться к нему как к val, который никогда не упоминается явно. Но когда я назвал два vals _
, Скала пожаловалась.
Почему бы просто не называть валы, как вы их называете, в параметрах функции, т. Е. 'Implicit val seed = Seed (" xyz ")'? – phadej
@OlegGrenrus Вот что я делал, на самом деле. Я мог бы жить с этим. Тем не менее, разве это не кажется излишним? –