在Scala中将Integer作为AnyVal返回

时间:2019-03-11 00:47:39

标签: scala

我是Scala的新手。我仍在尝试了解方法返回类型在Scala中的工作方式。我有一个基类如下:

abstract class CustomNumber {
  def value: AnyVal
  override def toString = value.toString
}

还有一个子类,如下所示:

class CustomInteger(val input: Integer) extends CustomNumber {
  def value = input
}

但是当我尝试运行此代码时,出现错误:

the result type of an implicit conversion must be more specific than AnyVal
  def value = input

type mismatch;
 found   : Integer
 required: AnyVal
  def value = input

如果Integer只是一个子类,为什么将AnyVal返回为open Fable.Helpers.React open Fable.Helpers.React.Props select [] [ option [ Value "a" ] [ str "a" ] option [ Value "b" ] [ str "b" ] option [ Value "c" ] [ str "c" ] ] 会出错?

2 个答案:

答案 0 :(得分:3)

  

AnyVal是所有值类型的根类,这些值描述了在底层主机系统中未实现为对象的值。值类在Scala语言规范的12.2节中指定。   https://www.scala-lang.org/api/current/scala/AnyVal.html

就像它说的那样,AnyVal是Scala中指定的值类型的根类。 我假设您正在使用Java的Integer。使用Int可以解决此问题。

PS似乎您正在尝试创建原始类型的包装器类,因此应在此使用AnyVal使用value type

答案 1 :(得分:2)

我认为只需将其更改为:

class CustomInteger(val input: Int) extends CustomNumber {
  def value = input
}

Int是整数的scala类型/类。看看here了解更多详细信息