Perl 6 的多重调度如何决定使用哪个例程?

2023-12-27

考虑这个程序,我在参数列表中构造了一个数组。尽管有一个接受数组的签名,但这调用了接受列表的签名:

foo( [ 1, 2, 3 ] );

multi foo ( Array @array ) { put "Called Array @ version" }
multi foo ( Array $array ) { put "Called Array \$ version" }
multi foo ( List $list )   { put "Called List version" }
multi foo ( Range $range ) { put "Called Range version" }

我从一个意想不到的例程中得到输出:

Called Array $ version

如果我取消注释其他签名,则该签名称为:

Called List version

为什么它不调用( Array @array )版本?调度员如何做出决定(以及记录在哪里)?


为什么它不调用 ( Array @array ) 版本?

你的测试foo调用只有一个数组([1,2,3]) 作为其参数,而不是数组of Arrays (eg [[1,2,3],[4,5,6]]).

(The @ in @array表示一个值does Positional,例如数组或列表。Array @array表示相同的事物,但有附加的约束,即数组、列表或其他任何元素的每个元素都是一个Array.)

调度员如何做出决定?

简单来说,它选择最窄的匹配类型:

multi foo ( Array       )              {} # Narrowest
multi foo ( List        )              {} # Broader
multi foo ( Positional  )              {} # Broader still
multi foo ( @array      )              {} # Same as `Positional`

(子类型关系图Array, List and Positional https://docs.perl6.org/images/type-graph-Array.svg.)

有关大量详细信息,请参阅jnthn对相关SO问题的权威回答 https://stackoverflow.com/a/45123753/1077672.

(以及它记录在哪里)?

我不确定医生的情况。多次调度 https://docs.perl6.org/language/functions#Multi-dispatch看起来非常小。

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

Perl 6 的多重调度如何决定使用哪个例程? 的相关文章

  • 自动生成 F# 签名文件 (.fsi)

    我正在开发一个项目 该项目有许多我想对其应用访问控制约束的模块 我还想让我的项目包含有关每个函数的类型签名的附加文档 我知道通过 F 签名文件可以非常轻松地完成这两项任务 但是 我的项目很大并且包含很多文件 我需要一种方便的方法为每个文件生
  • Android N - 如何检查 apk 是否使用 schema v2 进行签名

    提供Android N新的apk签名方案v2 https developer android com about versions nougat android 7 0 apk signature v2 如何检查特定的 apk 是否使用新签
  • 发件人证书在签名验证之前已过期

    我正在开发一个关于 Java 中的证书和数字签名的项目 但我无法理解以下情况 文件发送者和接收者的证书在创建签名时有效 但当接收者收到文件时 发送者的证书已过期 这种情况是否有效 接收者可以正常验证签名 还是不能 还有一个问题 不可否认密钥
  • Perl 6 中有快速并行“for”循环吗?

    给定一些对 1 到 500000 之间的每个数字进行一些数学 转换的代码 我们有选择 简单的for循环 for 500000 gt i my result i 2 Str 在我的不科学基准测试中 这需要 2 8 秒 最规范的并行版本在一个P
  • 签名扫描

    许多防病毒程序使用基于签名的恶意软件检测 这是为 ClamAV 创建签名 http www clamav net doc webinars Webinar Alain 2009 03 04 pdf 考虑到整个文件是恶意软件 我可以理解他们如
  • 将嵌入的 Pod 打印为带 termcap 转义的格式化文本

    我正在尝试将嵌入式 Pod 作为 ANSI 文本输出到终端 在 Perl 5 中我可以使用Pod Text Termcap https metacpan org pod Pod Text Termcap use strict use war
  • 从 Native 指针中获取数据

    将数据放入 Perl 6 Native 指针中没什么大不了的 sub memcpy Pointer void source Pointer void destination int32 size is native my Blob blob
  • CommaIde 上未声明子例程“say”

    我用 CommaIde 打开了这个简单的脚本 usr bin env perl6 my str foobar say str IDE 突出显示单词 say 并显示错误 子程序说未定义 但是 如果我执行该脚本 它运行正常 其他核心方法 如 p
  • Perl 6 对象如何找到可能位于父类或角色中的多重方法?

    考虑这个例子 其中子类有一个没有签名的 multi 方法和一个带有 slurpy 参数的方法 class Foo multi method do it put Default multi method do it Int n put Int
  • 默认参数装饰器 python

    Python 3 6 我正在尝试创建一个装饰器 自动将参数的字符串指定为默认值 such as def example one one two two three three pass 相当于 DefaultArguments def ex
  • 在 Ubuntu 15.10 上安装 Perl6 和 Panda。 bootstrap.pl 的问题

    我正在尝试在 Ubuntu 15 10 上安装 Panda 首先我尝试过 git clone recursive git github com tadzik panda git cd panda perl6 bootstrap pl 最后一
  • Perl 6 规则中 .parse 锚点还是 :sigspace 首先?

    我有两个问题 我表现出的行为是否正确 如果是 它是否记录在某处 我在玩语法TOP方法 宣布为rule 它意味着字符串的开头和结尾锚点以及 sigspace grammar Number rule TOP d my strings 137 1
  • 如何将perl6文件编译为exe

    我正在使用基于 Windows 上 MoarVM 构建的 perl6 版本 我创建了一些 perl6 文件并想将其编译为 exe 我尝试了以下方法 perl6 target MAST r pl gt r 现在我想将 r 编译为可执行文件 我
  • C# 中的数字签名,无需使用 BouncyCastle

    不使用第 3 方 BouncyCastle 库 有没有办法读取自定义私钥并签署消息 sha256哈希 使用私钥加密 从技术上来说 是的 根据您拥有的密钥类型 答案会变得更加棘手 编辑 2019 年 10 月 NET Core 3 0 以 D
  • Perl 6 语法与我认为的不匹配

    我正在做代码出现第 9 天 http adventofcode com 2017 day 9 您坐了一会儿并记录了流的一部分 您的谜题输入 这些字符代表组 开头的序列 并结束于 在一个组内 有零个或多个其他东西 用逗号分隔 要么是另一个组
  • 将 Azure CDN 与共享访问签名结合使用

    我正在尝试合并 Azure 来存储应用程序的大部分文件 我想将这些文件上传到 azure 中的私有容器和私有 blob 并通过 Azure CDN 将这些上传内容复制到所有其他节点 仍然作为私有容器和 blob 然后 我希望我的应用程序向存
  • 在 macOS 上运行 Comma IDE 时找不到匹配的虚拟机

    我安装了 Comma IDEthis https commaide com download链接 但当我尝试通过双击应用程序文件夹中 Finder 中的应用程序图标来运行它时 出现错误 未找到匹配的 VM 需要 Java 1 8 或更高版本
  • 在采用 ARM 处理器架构的 Android 上安装 Rakudo

    我正在尝试使用 Termux 在采用 armv7l 处理器架构的 Android 上安装 Rakudo 我尝试从源代码编译 但没有成功 然后有人指出了Termux用户没有用 https github com its pointless 和他
  • Perl 6:检查元素是否在列表中的最佳方法是什么?

    假设我有一个大数组 stuff and a thing 我想知道是否 thing is in stuff 在 Perl 6 中做到这一点的最佳方法是什么 我所说的 最好 是指 惯用的 可读的 高性能的 不一定按这个顺序 实际上有两个单独的案
  • 哈希组合器无用,或者无法修改不可变哈希?

    这段代码 constant what doesn t gt change what will gt change 应该说一些类似于 无法修改不可变哈希 的内容 然而 它说 Potential difficulties Useless use

随机推荐

  • Bootstrap 3.0.0 破坏了日期选择器图标

    这里是Demo http plnkr co edit 6nUu7JkVYdTiWHbXhT3f p preview 如果您使用2 3 1 取消第12行的注释 您将看到按钮正确显示 有谁知道如何修复 3 0 0 rc1 版本 要修复 boot
  • 来自 png 图像的橱窗应用程序的表达式混合中的平滑动画

    我想在 Windows 应用商店应用程序的 Expression Blend 中制作动画 因为不支持 gif 图像 所以我有大约 30 张 png 图像 我在 Blend 中制作了一个故事板动画 方法是在时间轴中每 2 秒更改一次图像源 但
  • 为什么 C 数组尾部有多余的字节? [复制]

    这个问题在这里已经有答案了 我检查了 C 数组尾部可能有一些额外的字节 有我的代码 int a 5 int test 1 2 3 4 int b 5 test 1 11 test 4 11 cout lt lt b lt lt endl 1
  • 如何使用 IIS 7.5 压缩 ASP.NET MVC 的 Json 结果

    我很难让 IIS 7 正确压缩 ASP NET MVC 的 Json 结果 我在 IIS 中启用了静态和动态压缩 我可以使用 Fiddler 验证普通文本 html 和类似记录是否已压缩 查看请求 存在接受编码 gzip 标头 响应具有 m
  • Wordpress 登录页面重定向到普通用户的 Woocommerce 我的帐户页面

    我陷入了深深的麻烦之中 请帮我找到以下问题的解决方案 我有一个使用 Woocommerce 插件的 WordPress 网站 通常 Woocommerce 不允许普通用户 客户 用户 您可以从 Wordpress 管理区域 gt 添加新用户
  • 参数返回 SQL0418 的 iDB2 Select 命令

    我正在开发一个使用 IBM Data DB2 iSeries dll 连接到 DB2 iSeries 7 1 数据库的 NET 应用程序 我需要执行一个 SELECT 命令 该命令有 n 个参数 这些参数在查询中定义为 paramX 然后设
  • 将通配符传递给别名

    我使用修改列表命令作为别名 在 KSH 中 alias ltf ls lrt d 1 PWD 所以命令ltf显示类似这样的内容 rw r r 1 myuser mygroup 0 Apr 18 12 00 usr test txt rw r
  • 用C#编写0-1背包的模拟退火算法

    我正在学习模拟退火算法 并且有一些关于如何修改示例算法来解决 0 1 背包问题的问题 我在CP上发现了这段很棒的代码 http www codeproject com KB recipes simulatedAnnealingTSP asp
  • Google Cloud SQL 的典型 ormconfig.json 文件?

    我已经尝试了几个小时了 Google Cloud SQL 与 TypeORM 配合使用的 ormconfig json 文件应该是什么 我设法让它在本地使用数据库的IP 使用mysql工作台和Google云代理并将我的IP列入白名单 但我不
  • 如何等到跟踪脚本触发后再重定向用户?

    我运行一个典型的价格比较网站 用户浏览产品 然后单击链接转到商家的网站 在被重定向到商家的网站之前 用户会看到一个 我们正在重定向您 页面 此页面仅允许跟踪代码 Google Analytics Adwords Bing Ads 来跟踪事件
  • FirebaseRecyclerAdapter 具有用于删除项目的操作模式

    我正在尝试实现一个操作模式来删除 FirebaseRecyclerView 中的项目 奇怪的是 有时删除的项目并不是选定的项目 我认为错误出现在 ToogleSelection 方法或 RemoveItems 方法中 但我不知道它是什么 适
  • PyCharm 在同一文件夹中找不到导入

    我正在使用 PyCharm 并且从同一目录中的另一个 python 文件导入一些常量 导入在运行时起作用 但我在导入语句上以及每次使用文件中的常量时都会得到这个恼人的红色下划线 这是文件层次结构 请忽略文件夹上的红色下划线 它们与此无关 是
  • FileSystemWatcher 网络断开

    我有一个 FileSystemWatcher 监视网络共享上的文件 如果发生导致共享不可用的事件 可能是由于网络问题 FileSystemWatcher 将断开连接 显然我可以处理 错误 事件 也许可以做一些日志记录 并且很多文章建议在错误
  • Matplotlib,使用 imshow 刷新图像更快

    我正在开发一个项目 在该项目上 我必须在 GUI 窗口上绘制 320 250 像素的图像 如果可能的话 每秒绘制 60 次 所以我尝试这样做matplotlib 2 0 2 Python 3 6 and PyQt5 因为我开始了解这些工具并
  • 如果是嵌套元素,则后代 Until()

    在我之前的问题中 link https stackoverflow com questions 75957548 xdocument descendants cannot distinguish between parent child e
  • 如何将 Asp.Net Server 标签添加到 JS 并对其进行评估?

    我有一个 javascript 文件 我动态地将其包含到 ASP NET MVC 视图中 该脚本设置了一些我想从中获取其值的 javascript 变量和 HTML 帮助程序 以下将 js 变量设置为等于包含 var testPortal
  • Kivy:触摸标签以选中复选框

    我正在尝试为 MCQ 制作一个 aap 这里我想要一个功能 如果有人点击与复选框相对应的标签 则该复选框也必须被选中 在Kivy中可以吗 因为 Kivy 不直接提供任何与复选框的文本关联 这是 kv 的一部分
  • 我们如何使用 startActivityforResult() 来发送电子邮件意图?

    我正在使用意图发送带有附件的电子邮件 工作正常 我想获得此电子邮件意图结果 我已经使用过startActivityforResult 但我无法获得电子邮件意图的结果 我们如何使用startActivityforResult 电子邮件意图 谢
  • 在 REST API 中使用 LINK 和 UNLINK HTTP 动词

    我目前正在致力于实现 REST API 我有一个资源模型 其中各个资源之间存在大量关系 我的问题是 如何以 RESTful 方式将两个现有资源相互链接 建立关系 我遇到的一种解决方案是使用 LINK 和 UNLINK HTTP 动词 API
  • Perl 6 的多重调度如何决定使用哪个例程?

    考虑这个程序 我在参数列表中构造了一个数组 尽管有一个接受数组的签名 但这调用了接受列表的签名 foo 1 2 3 multi foo Array array put Called Array version multi foo Array