Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/perl/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Perl 如何使用Moose创建私有/公共变量和函数?_Perl_Oop_Moose - Fatal编程技术网

Perl 如何使用Moose创建私有/公共变量和函数?

Perl 如何使用Moose创建私有/公共变量和函数?,perl,oop,moose,Perl,Oop,Moose,我正在浏览Moose食谱,但我仍然看不出是否可以使用它创建私有变量和函数?可能吗?如果是,如何使用Moose创建它们?在标识符前面加上\u以将函数/变量等标记为私有。这是在有关范围的部分中记录的,大约在文档的中间。 理智的程序员和一些工具(源代码解析器/文档)尊重这一点,但编译器并不强制执行。参见。如daxim所指出的,私有方法有“ux”前缀。因为属性(实例变量)会生成现成的getter方法(如果rw也生成setters方法),所以您应该执行以下操作: has 'myvariable' =>

我正在浏览
Moose
食谱,但我仍然看不出是否可以使用它创建私有变量和函数?可能吗?如果是,如何使用Moose创建它们?

在标识符前面加上
\u
以将函数/变量等标记为私有。这是在有关范围的部分中记录的,大约在文档的中间。


理智的程序员和一些工具(源代码解析器/文档)尊重这一点,但编译器并不强制执行。参见。

如daxim所指出的,私有方法有“ux”前缀。因为属性(实例变量)会生成现成的getter方法(如果rw也生成setters方法),所以您应该执行以下操作:

has 'myvariable' => (
    is       => 'ro',
    writer   => '_myvariable',
    init_arg => undef,
    # other options here
);
通过这种方式,您可以在类/实例中设置该属性,而不能从外部设置该属性。如果只读访问太多,也可以将其标记为“私有”:


如果愿意,您可以查看MooseX::Privacy,它是实现这一点的扩展。但是,私有方法并不是真正私有的,因为它们将死亡,而不是在调度中被跳过。
has '_myvariable' => (
    is       => 'ro',
    writer   => '_set_myvariable'
    init_arg => undef,
    # other options here
);