加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

尝试通过Perl中的词法绑定来本地化外部包变量

发布时间:2020-12-15 23:22:02 所属栏目:大数据 来源:网络整理
导读:这是一个很长的标题,但我担心在不失去问题的真正含义的情况下我不能说出一个字.我将简要介绍一下我首先想要实现的目标,然后对我为什么希望以这种方式完成这一过程进行漫长的漫游.如果您打算直接回答遵守问题标题,请跳过漫步:-) 简要说明 假设存在一个符合我
这是一个很长的标题,但我担心在不失去问题的真正含义的情况下我不能说出一个字.我将简要介绍一下我首先想要实现的目标,然后对我为什么希望以这种方式完成这一过程进行漫长的漫游.如果您打算直接回答遵守问题标题,请跳过漫步:-)

简要说明

假设存在一个符合我想要的lexicalize内置,这里有:

package Whatever;
{
  lexicalize $Other::Package::var;
  local $var = 42;
  Other::Package->do_stuff; # depends on that variable internally
}

为什么和whynots

对于一些上下文,我是白盒测试第三方模块.

我希望变量本地化,因为我希望它在有限的时间内更改,然后测试继续进行其他操作.本地是我发现这样做的最佳方式,而不依赖于知道模块对初始值的选择.

我想要一个词法绑定有两个主要原因:

>我不想污染测试文件的更高级别的命名空间.
>我想要比完全限定名称短的东西.为简洁起见,它不在示例代码中,但我使用的标识符比显示的更多,其计算和更新相对于其先前的值.

我无法正常使用我们因为它不会从另一个包中获取变量:“没有包名称允许变量$Other :: Package :: var in”my“.”作弊暂时输入其他::包的范围不切断它:如果我使用一个块({package Other :: Package;我们的$var}),那么绑定的持续时间不够长;如果我不这样做(打包Other :: Package;我们的@var;包main),那么我需要知道并复制以前的包名,这样可以防止过多地移动那段代码.

在询问此问题的前一种形式之前做完作业时,我发现了Lexical :: Var,这看起来就像我需要的那样.唉:“不能通过引用进行本地化.”

我也尝试过我对基于* var的表单的直觉,但不断遇到语法错误.我今天学到了更多关于范围和约束的知识:-)

我想不出为什么我想要的东西不可能,但我找不到正确的咒语.我要求一个不幸的未实现的边缘案例吗?

解决方法

我不太确定我是否理解正确.这有帮助吗?

#!/usr/bin/env perl

{
    package This;
    use warnings; use strict;
    our $var = 42;

    sub do_stuff {
        print "$varn";
    }
}

{
    package That;
    use warnings; use strict;

    use Lexical::Alias;
    local $This::var;

    alias $This::var,my $var;

    $var = 24;
    print "$varn";

    This->do_stuff;
}

package main;

use warnings; use strict;

This->do_stuff;

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读