有没有办法在 Scala 中为泛型类型变量设置默认值? [英] Is there any way to set a default value to generic type variable in Scala?

查看:84
本文介绍了有没有办法在 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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆