- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试发送地址 this issue ,实际上是由 this other stackoverflow question 提出的与callwith
的不同行为有关和 samewith
。后者似乎定义得很清楚,但是用 callwith
就不太清楚了。
看看这个例子:
proto how-many(|) {*}
multi sub how-many( Pair $a, Pair $b ) {
say "Int $a and $b";
return "There are $a and $b"
}
multi sub how-many( $a, $b ) {
say "Not int $a and $b";
my $calling = callwith( 1 => $a, 2 => $b );
return $calling;
}
say how-many( "little piggie","littler piggie" );
根据文档,callwith
应该调用下一个匹配的候选者。但是,这是输出:
Not int little piggie and littler piggie
(Any)
所以它调用了 how-many
的第二个版本,然后调用一个不存在的函数(显然)并返回 Nil
,它作为 Any 传递
到调用例程。
我也尝试过使用不同的签名,但这也不起作用。文档中的示例显然表明只有当变量属于同一类层次结构时它才有效。是这样吗?可能不是,因为将位置签名更改为 Any $a, Any $b
也不起作用,也无法更改声明的顺序。
Above, changing
callwith
withsamewith
will obviously work, but I'm trying to understand howcallwith
works, not make the code above work.
此外,它似乎是在类层次结构中向下,而不是向上。这个example in roast ,Perl 6 测试套件,有效:
my $tracker = '';
multi d($x) { $tracker ~= 'Any' ~ $x };
multi d(Int $x) { $tracker ~= 'Int'; callwith($x+1); $tracker ~= 'Int' };
lives-ok { d(3) }, 'can call callwith inside a multi sub';
但是,如果我们更改它,以便我们从层次结构的底部使用 callwith
,如下所示:
my $tracker = '';
multi d($x) { $tracker ~= 'Any' ~ callwith( "called-with" => $x) };
multi d(Pair $x) { $tracker ~= "Pair $x" };
say d( 3 );
失败了
Use of Nil in string context in sub d at rewrite-test-callwith.p6 line 6
这是预期的行为吗?
最佳答案
所有 callwith
、nextwith
、callsame
和 nextsame
遍历候选集合由原始参数确定。因此,虽然 callwith 可以用来替换参数,但这就是它所做的一切。它不会导致要迭代的预定候选列表发生变化。
考虑这三个候选人:
multi foo(Any $x) { say "In Any case with $x" }
multi foo(Real $x) { say "In Real case with $x"; callwith($x.Int); }
multi foo(Int $x) { say "In Int case with $x"; callsame(); }
我们可以使用 .cando
询问哪些候选人申请,并向其传递 Capture
。因此:
.say for &foo.cando(\(42));
将产生以下输出:
sub foo (Int $x) { #`(Sub|78402328) ... }
sub foo (Real $x) { #`(Sub|78412816) ... }
sub foo ($x) { #`(Sub|78412968) ... }
由于 3 名候选人全部匹配。调用 foo(42)
将产生以下输出:
In Int case with 42
In Real case with 42
In Any case with 42
相比之下,:
.say for &foo.cando(\(4.2));
输出为:
sub foo (Real $x) { #`(Sub|78412816) ... }
sub foo ($x) { #`(Sub|78412968) ... }
调用 foo(4.2)
会使 callwith
迭代这些候选者:
In Real case with 4.2
In Any case with 4
在最一般的候选中,callwith
或类似的方法不会产生任何效果,并且计算结果为 Nil
。
虽然这里的示例是多重子函数,但这同样适用于包装器和非多重方法,它们也遍历预定的列表。
最后,还值得观察的是,如果每次都有新的调度,我给出的示例最终将成为无限递归。通过遍历预先确定的候选列表,这种情况永远不会发生。
请注意,这些都不适用于 samewith
,它的存在正是为了进行全新的调度。
关于raku - 打电话而不调用其他候选人? "other candidates"是什么?其他候选人名单是否已经耗尽?该列表可用吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51239934/
我们认为 Cloud Foundry 中的一组虚拟机存在 Azure SNAT 耗尽问题。这些机器不经过负载平衡器。 我已经浏览过这份文件: https://learn.microsoft.com/e
我正在使用 onSceneTouchEvent 在 TMX map 上移动玩家: @Override public Scene onCreateScene() { ...
关于这篇文章:Python del Statement , 我最近遇到了以下片段: # custom_process.py import threading import subprocess myL
我有一个具有多个线程的 python 应用程序,其中线程 2 到 n 可能会打开任意数量的文件。我想确保当线程 1 尝试打开文件时,它绝对不会因为文件描述符耗尽而失败。简而言之,我想保留文件描述符而不
我开发了一个 c# .net 4 应用程序,它每天对组织中的每台计算机(超过 70,000 台)执行 WMI 查询。由于与此线程无关的原因,我无法从服务器运行该应用程序,而是从我的 Windows X
我正在尝试在 pytorch 中实现 Yolo-v2。但是,我似乎只是通过网络传递数据而耗尽了内存。该模型很大,如下所示。但是,我觉得我在用我的网络做一些愚蠢的事情(比如不在某处释放内存)。网络在 c
关闭。这个问题需要更多focused .它目前不接受答案。 想改进这个问题吗? 更新问题,使其只关注一个问题 editing this post . 关闭 9 年前。 Improve this qu
我在这里查看了几个与“太多客户”相关的主题,但仍然无法解决我的问题,所以我必须针对我的具体情况再次询问。 基本上,我设置了本地 Postgres 服务器并需要进行数万次查询,所以我使用了 Python
我正在使用 std::random_device 并想检查它的剩余熵。根据 cppreference.com: std::random_device::entropy double entropy()
我有以下 docker-compos.yml 文件: web: build: . ports: - "4200:4200" - "35729:35729" vo
如果 Linux 操作系统用完进程 ID 会怎样?是否会删除较旧的进程以释放空间以适应 future 的请求? 最佳答案 我假设您问的是达到进程限制时会发生什么。在这种情况下,系统不允许创建新进程,直
我们将 Azure SQL 用作单个数据库并在 DTU 定价模型下使用。我们有一个包含约 50M 条记录的表,我们想在单个字符串属性上添加一个新的非聚集索引。 问题是这是一个生产数据库。如果我使用简单
我们有多个服务总线监听器在应用服务内作为连续的 Azure Webjobs 运行。总共有 12 个监听器 Web 作业在同一个 S1 应用服务计划上运行。环境很小,每天总共大约有~1000-10000
Der Azure 网络专家, 我们的 Web 应用程序经常耗尽出站 TCP 连接。大多数出站连接实际上是 Azure 内部连接(SQL、BlobStore、后端服务)。但我们还没有虚拟网络和专用端点
我下载了一个简单的静态网络服务器的源代码 http://www.ibm.com/developerworks/systems/library/es-nweb/sidefile1.html 但是,我对第
我已经查看了有关 SO 的其他类似问题,但无法很好地将所有内容拼凑在一起。我有一个 Rails 应用程序(在 Heroku 上),它使用具有多进程和多线程的 Puma。我的应用程序还使用 Redis
在此代码中,如果我对 ParseForm() 调用进行注释,请求将按预期工作 package main import ( "fmt" "net/http" "net/url"
我不明白。 XSLX 表大约有 3MB 大,但即使是 1024MB 的 RAM 也不足以让 PHPExcel 将其加载到内存中吗? 我这里可能做错了什么: function ReadXlsxTable
我已配置 CachingConnectionFactory包装了一个 MQTopicConnectionFactory和 MQQueueConnectionFactory每个缓存大小设置为 10。 这
我正在检查 CodeEval 中的一些问题并在 PHP 中遇到这个奇怪的错误。我没有用其他语言遇到过这样的事情,所以我不知道为什么会发生这种情况。不包括整个答案(请不要帮我找到解决方案,除了 PHP
我是一名优秀的程序员,十分优秀!