有没有办法在 Scala 中为泛型类型变量设置默认值? [英] Is there any way to set a default value to generic type variable in Scala?
本文介绍了有没有办法在 Scala 中为泛型类型变量设置默认值?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我想为变量设置一个默认值.但是我的 Scala 编译器说:
I want to set a default value to variable. But my Scala compiler says:
Error:(20, 16) unbound placeholder parameter
val p: T = _
^
这是代码.
object InverseFunctionsExample extends App {
type D = Double
def f(x: D): D = 5 * x + 10
def g(x: D): D = 0.2 * x - 2
printMessage(isInversible(f, g))
def printMessage(inv: Boolean): Unit = {
if (inv) print("YES!") else print("NOPE!")
}
def isInversible[T](f: (T) => T, g: (T) => T): Boolean = {
val p: T = _
if (f(p) == g(p))
true
else
false
}
}
是否可以以某种方式用默认值初始化 val p
?
Is it possible to initialize a val p
with default value somehow?
推荐答案
只有 var
字段(不是局部变量)可以用这种方式初始化.如果要为不同类型定义默认值",标准方法是 类型类模式:
Only var
fields (not local variables) can be initialized in this way. If you want to define "default values" for different types, the standard approach is the type-class pattern:
case class Default[T](value: T)
object Default {
implicit val defaultInt: Default[Int] = Default(0)
implicit val defaultString: Default[String] = Default("")
...
}
def isInversible[T](f: (T) => T, g: (T) => T)(implicit d: Default[T]): Boolean = {
if (f(d.value) == g(d.value))
true
else
false
// or just f(d.value) == g(d.value)
}
这篇关于有没有办法在 Scala 中为泛型类型变量设置默认值?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文