我是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" ]
]
会出错?
答案 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了解更多详细信息