本文介绍了为什么输入参数在方法中是相反的?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

以下是教程中的一些代码:

Here's some code from this tutorial:

case class ListNode[+T](h: T, t: ListNode[T]) {
  def head: T = h
  def tail: ListNode[T] = t
  def prepend(elem: T): ListNode[T] =
    ListNode(elem, this)
}

该教程说:

<$ c如何$ c> T 在 predend 和其他 T 引用中未处于协变位置( def头:T = h def尾:ListNode [T] = t ),显然是协变的吗?

How is T not in a covariant position in predend, and the other T references (def head: T = h and def tail: ListNode[T] = t), apparently, are covariant?

我要问的是为什么中的 T 放在不是协变的。 ,您的类应定义为:

So, referring to the source code of scala.collection.immutable.List.::, your class should be defined as this:

case class ListNode[+T](h: T, t: ListNode[T]) {
  def head: T = h
  def tail: ListNode[T] = t
  def prepend[A >: T](elem: A): ListNode[A] = ListNode(elem, this)
}

参数类型 A 是一个新的类型参数的下界是 T

The argument type A is a new type parameter which is lower bounded to T.

这篇关于为什么输入参数在方法中是相反的?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!

08-16 07:56