为什么方法的类型位置被标记为负数?

2023-12-09

抱歉,我已经问了一些这样的问题,但我仍然无法得到明确的答案,也许我糟糕的英语和不清晰的表达让好心人感到困惑。

当我读到《类型参数化》这篇文章时:http://www.artima.com/pins1ed/type-parameterization.html,我看到有一些关于类型位置的解释:

作为一个有点人为的示例,请考虑以下类定义,其中多个位置的方差用 ^+(表示正数)或 ^-(表示负数)进行注释:

   abstract class Cat[-T, +U] {
     def meow[W^-](volume: T^-, listener: Cat[U^+, T^-]^-)
     : Cat[Cat[U^+, T^-]^-, U^+]^+
   }

我能理解这堂课的大部分内容,除了W位置。我不明白为什么它标记为negative,并且整个文档没有任何解释。

它还说:

用+注释的类型参数只能用在正数位置,而用-注释的类型参数只能用在负数位置。

我怎样才能找到一个类型-注释就位W适应这个消极的立场?


语言参考说:

  • 方法参数的方差位置与封闭参数子句的方差位置相反。
  • 类型参数的方差位置与封闭类型参数子句的方差位置相反。
  • 类型声明或类型参数下界的方差位置与类型声明或参数的方差位置相反。

好的,类型参数具有方差位置意味着什么?

class Moo[+A, -B] {
  def foo[X] (bar : Y) ...

所以Y处于逆变位置,这一点很清楚。我们可以把B放在它的位置上,但不能把A放在它的位置上。

但是 X 处于逆变位置意味着什么呢?我们不能替换 A 或 B 或那里的任何东西,它只是一个形式参数!

确实如此,但是这件事可以有从属职位它们是类型,并且具有方差。因此,在跟踪方差翻转次数时,我们需要计算 X 的位置。这里没有 X 的从属子句,但请考虑一下:

class Moo[+A, -B] {
  def foo[X >: Z] (bar : B) ...

我们或许可以用 A 或 B 来代替 Z,但是哪个是正确的呢?嗯,Z的位置和X的位置相反,X的位置和顶层的位置相反,是协变的,所以Z也一定是协变的。让我们检查:

abstract class Moo[+A, -B] {
      def foo[X >: A] (bar : B)
}    
defined class Moo

看来我们是对的!

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

为什么方法的类型位置被标记为负数? 的相关文章

随机推荐

  • 替换长 URL 的一部分并重定向

    有没有办法重定向 URL 如下所示 URL是基于过滤系统生成的 所以它是这样的 https example com product category no slash generated part is autoadded here 由于产
  • 给定一个视图,我如何获取它的viewController?

    我有一个指向UIView 我如何访问它UIViewController self superview 是另一个UIView 但不是UIViewController right 来自UIResponder的文档nextResponder UI
  • 以编程方式触发时 UIRefreshControl 不刷新

    我试图在视图加载时显示刷新控件 以表明我正在从 Parse 获取数据 刷新控件在应用程序运行时正常工作 但我无法让它从应用程序中的任何位置以编程方式触发 这是似乎没有运行的代码 override func viewDidAppear ani
  • 在 PHP 代码中以密件抄送方式添加电子邮件地址

    我正在尝试弄清楚如何在密件抄送中添加电子邮件地址 由于我添加了更多 headers 来添加盲电子邮件地址 因此整个代码不再起作用
  • Google App Engine 数据存储中的地理空间查询

    我读了下面的帖子 使用 Objectify 查询 Geopt 这正是我的应用程序所需要的 在帖子的最后 我读到地理空间搜索正在阿尔法体育场 但该帖子已经一年了 我在 Google App Engine 上找不到有关地理空间查询状态的任何信息
  • 如何通过 RPC 连接到 Hedera 测试网?​

    我无法通过 HTTP 连接到 Hedera Testnet RPC 端点 可靠地 我间歇性地收到以下 未知错误 Request ID fe7b9928 a23f 0d72 61a1 b7cd23658c01 Unknown error in
  • SQL查找具有多个字段的重复项(无唯一ID)解决方法

    我正在尝试使用以下几个字段从数据库中查找重复的供应商vendor表和供应商地址桌子 问题是 我进行的内部联接越多 查询丢失潜在结果的次数就越少 虽然我的供应商 ID 中没有重复项 但我希望找到类似的潜在供应商 ID 这是我到目前为止的查询
  • Android:在通话期间检测当前活动的电话号码

    目标 在 Android 平台上 检测当前正在与用户通话的个人的电话号码 目前 使用PhoneListener 在呼叫保持的情况下存在一定的歧义 案例 用户正在通话期间与某人通话 通话 1 用户因此处于呼叫状态摘机 然后用户处于 RINGI
  • Java 中的静态块与初始化块? [复制]

    这个问题在这里已经有答案了 可能的重复 静态初始化块 考虑以下code public class Test System out println Empty block static System out println Static bl
  • Jquery:包含显示所有跨度的警报

    我有一个跨度 span style font weight bold Text goes her span 像这样 contentarea bind click function e e preventDefault if e target
  • 如何优化此方法以将字符串分成块?

    这是方法 我想知道我是否违反了这里的任何最佳实践 或者就语言而言我是否做错了什么 private List
  • Django + mod_wsgi + Apache = 403 禁止

    我在 Debian 上总是遇到这个错误 无论我把代码放在哪里 我已经解决了这里的所有其他问题 但没有发现对我的案例有用的东西 这是默认站点配置 WSGIScriptAlias home user Code mysite core WSGIP
  • 可以使用GD和PHP为透明图像添加背景颜色

    我有使用 GD 用 php 语言编写的缩略图创建类 我想知道当我上传 png 或 gif 透明图像时 我可以在缩略图中添加背景吗 如果可能的话 请指导我如何做 谢谢 这是 PNG 文件的有效解决方案 filePath full path t
  • 如何在 PostgreSQL 中显示表?

    相当于什么show tables 来自 MySQL 在 PostgreSQL 中 来自psql命令行界面 首先 选择您的数据库 c database name 然后 这显示当前模式中的所有表 dt 以编程方式 或从psql当然 接口也是如此
  • OpenCV 对感兴趣区域的模糊

    我正在尝试创建一个圆圈并模糊 OpenCV 中的内容 但是 我可以制作圆圈 但无法模糊该部分 我的代码如下 请帮帮我 import io import picamera import cv2 import numpy as np impor
  • 当所选行是最后一行之前的行时自动滚动表格

    I have an issue related to scrolling table When the page is loaded the first row ROW 1 will be default selected row high
  • 无法让“this.mouse.click()”与 casperjs 一起使用

    我试图理解 casperjs 但为此苦苦挣扎 有人可以告诉我为什么这有效吗 它导航到http www w3schools com html default asp var casper require casper create var m
  • Android 媒体播放器在后台停止播放

    我正在制作功能简单的音乐播放器应用程序 但是 当我在 Android 6 手机上听音乐时 有时音乐会停止播放 直到我使用电源按钮再次打开显示屏 然后正在播放下一首歌曲 因此加载下一首歌曲似乎出现问题 我尝试编写新应用程序只是为了测试它 为此
  • SecureRandom.getInstance("DRBG") 使用什么实际算法?

    Java 9 JSR 379 介绍 NIST DRBG如指定JEP 273 基于 DRBG 的 SecureRandom 实现 然而 NIST 文档SP 800 90Ar1 NIST 特别出版物 800 90A 修订版 1 使用确定性随机位
  • 为什么方法的类型位置被标记为负数?

    抱歉 我已经问了一些这样的问题 但我仍然无法得到明确的答案 也许我糟糕的英语和不清晰的表达让好心人感到困惑 当我读到 类型参数化 这篇文章时 http www artima com pins1ed type parameterization