首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >当冲突出现时,这能保证用%hash2覆盖%hash1吗?

当冲突出现时,这能保证用%hash2覆盖%hash1吗?
EN

Stack Overflow用户
提问于 2011-07-22 16:59:55
回答 3查看 150关注 0票数 3
代码语言:javascript
运行
复制
%args = (%hash1,%hash2);

当Perl中出现冲突时,这能保证用%hash2重写%hash1吗?

EN

回答 3

Stack Overflow用户

发布于 2011-07-22 17:07:28

是的,是这样的。较晚的密钥会覆盖较早的密钥。

票数 6
EN

Stack Overflow用户

发布于 2011-07-22 17:51:24

如果你没有看到覆盖行为,那么你做错了什么:

代码语言:javascript
运行
复制
#!/usr/bin/perl

use strict;
use warnings;

sub func { print "func\n" }
sub tion { print "tion\n" }

my %args = (
    handler => \&tion,
);

my $dispatch = {
    handler => \&func,
    %args
};

$dispatch->{handler}();

来自perldoc perlglossary

  • 列表

标量值的有序集。

来自perldoc perldata

列表对子列表进行自动插值。也就是说,当评估列表时,列表的每个元素都会在列表上下文中进行评估,并将结果列表值插入到列表中,就像每个单独的元素都是列表的成员一样。因此,数组和散列会在列表中丢失其身份

可以使用文字列表初始化散列,该列表包含要解释为键和值的项对。

实际的结果是,列表上下文中的散列产生一个键/值对的列表。一旦列表有了顺序(返回顺序),就永远不能保证键和值返回的顺序,但是列表保证了元素的顺序,所以(a => 1, %h)创建了一个以"a"开头的列表,然后是1,然后是%h返回的第一个键,然后是%h返回的第一个值,依此类推。然后将该列表按列表顺序分配给目标散列,这意味着如果键"a"%h中,则它将覆盖原始列表。

票数 4
EN

Stack Overflow用户

发布于 2011-07-22 20:23:41

不是的。%hash1根本不会被该语句修改。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6787766

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档