def test[T<:AnyVal](s:T):T={
s+1
}
这显示此错误:
:11:错误:类型不匹配;
发现:Int(1)
必需:字符串 S + 1
当T是AnyVal的类型时,为什么需要String?
答案 0 :(得分:0)
我不确定您为什么会收到关于String
的错误 - 虽然我怀疑它是因为您还未包含在此答案中的其他代码 - 但是,如果要在AnyVal
参数上调用+
方法,s
约束不足,则您发布的代码无效。
这是猜测,因为你还没有提到你正在尝试做什么,但我想它是&#34;我想要一个为任何数字加1的函数,无论其类型如何&#34;。
如果是这样,AnyVal
可能会受到限制(例如BigInt
不是AnyVal
)。实际上,您根本不需要这样的约束,而是您需要访问Numeric[T]
实例。 Numeric是一个类型类,提供多个运算符 - 包括+
。
用法看起来像这样(如果您还没有理解这一点,可能需要查看scala的含义):
def test[T](x: T)(implicit numeric: Numeric[T]): T = {
numeric.plus(x,numeric.one)
}
如果您确定自己确实需要AnyVal
约束,仍然可以添加Node
约束。