首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

如何防止在调用new时设置Perl Moose只读属性?

在Perl中,Moose是一个用于创建面向对象的类和对象的库。要在调用new时设置只读属性,可以使用Moose::Util::TypeConstraints模块中的enum函数。

以下是一个示例代码:

代码语言:perl
复制
package MyClass;

use Moose;
use Moose::Util::TypeConstraints;

enum 'MyEnum' => qw(value1 value2 value3);

has 'my_attribute' => (
    is => 'ro',
    isa => 'MyEnum',
    required => 1,
);

__PACKAGE__->meta->make_immutable;

在这个示例中,我们定义了一个名为MyClass的类,并使用enum函数定义了一个名为MyEnum的枚举类型。my_attribute属性被定义为只读,并且其类型为MyEnum

在调用new方法创建对象时,必须传递my_attribute参数,并且其值必须是MyEnum中定义的枚举值之一。

代码语言:perl
复制
my $obj = MyClass->new(my_attribute => 'value1');

这样,在调用new方法创建对象时,my_attribute属性就会被设置为只读,无法在对象创建后更改。

推荐的腾讯云相关产品和产品介绍链接地址:

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

Typescript 4.9重点特性探索

, ts 会自动帮我们自动推导 palette 的属性类型,所以我们可以直接调用它们的方法:const a = palette.red.at(0); // red 被推断为 number[] 类型...accessor name: string; constructor(name: string) { this.name = name; }}类的自动访问器会转化为具有无法访问的私有属性的获取和设置访问器...检查和 NaN处理数字相关的代码,是比较常见的。.../zoo";let x: Moose | HoneyBadger = foo();使用 “Sort Imports” 的缺陷是,Visual Studio Code中,这个功能只能是保存时调用功能,而不是手动触发的功能.../helper";let x: Moose | HoneyBadger = foo();这个功能对于全部编辑器可用,但是注意 Visual Studio Code(1.73 和之后)会支持内置的可以命令面板调用这些功能

77120

RegExp对象

当您检索某个文本,可以使用一种模式来描述要检索的内容。RegExp 就是这种模式。 简单的模式可以是一个单独的字符。 更复杂的模式包括了更多的字符,并可用于解析、格式检查、替换等等。...注意:当使用构造函数创造正则对象,需要常规的字符转义规则(在前面加反斜杠 \)。...比如,以下是等价的: var re = new RegExp("\\w+"); var re = /\w+/; 3.RegExp 修饰符 修饰符用于执行不区分大小写和全文的搜索。...除了换行符以外的任意字符 \n 换行符 \r 回车符 \t 制表符 限定符 限定符 解释 ^xx 以xx开始 xx$ 以xx结束 重复 重复 设置匹配的次数 {n} 匹配前一项n次 {n,m} 匹配前一项...image.png 对象属性 //正则的对象属性只读的,不能自己设置,只能在正则表达式中定义 var reg1 = /[A-Z]/; var reg2 = /[0-9]

1.5K30
  • Perl项目中的面向对象、继承默认加载和正则表达式的使用方法

    在这个匿名哈希表中,存储了所有实例属性。 其次,基于array方法,定义类,我们将为每个实例属性创建一个数组,每个对象实例的本质是对这些数组中的行的索引的引用。...Perl中可以使用任何名称。 可以使用各种Perl变量作为Perl对象。大多数情况下,我们将使用引用数组或散列。 接下来,我们使用Perl哈希引用为Person类创建一个构造函数。...如果找到AUTOLOAD,将调用它,并将全局变量$AUTOLOAD的值设置为缺少方法的完全限定名。 如果没有,Perl将声明失败和错误。...请注意,此引用是只读的,也就是说,不能访问 _[0]来修改它。...如果在析构函数返回之前重新祝福对象引用,Perl将在析构器返回之后调用重新祝福对象的DESTROY方法。这使有机会调用基类或指定的其他类的析构函数。

    1.8K40

    聊聊ASP.NET Core默认提供的这个跨平台的服务器——KestrelServer

    除了实现接口IServer定义的Features属性之外,KestrelServer还具有一个类型为KestrelServerOptions的只读属性Options。...这个属性表示对KestrelServer所作的相关设置,我们调用构造函数通过输入参数options所代表的IOptions对象对这个属性进行初始化。...当我们调用Run方法开启WebHost,请求处理管道被构建出来。...如果管道处理请求发生未被处理的异常,管道的Sever会调用ApplicationLifeTime对象的StopApplication方法向WebHost发送关闭应用的通知以便后者执行一些回收释放工作...介绍如何通过编程的方式为Server指定监听地址之前,我们有先来认识一个名为ServerAddressesFeature的特性。

    97970

    Python 进阶指南(编程轻松进阶):十、编写高效函数

    默认情况下,它会在它们之间放置一个空格,如下面的代码所示: >>> print('cat', 'dog', 'moose') cat dog moose 这些参数被称为位置参数,因为它们函数调用中的位置决定了哪个参数分配给哪个参数...subtract(123, 987)函数调用总是返回−864。Python 内置的round()函数传递3.14作为参数总是返回3。当传递相同的参数,非确定性函数不会总是返回相同的值。...比如调用random.randint(1, 10)会返回一个1和10之间的随机整数。time.time()函数没有参数,但是它根据调用该函数时计算机时钟的设置返回不同的值。...除了已经提到的那些,纯函数还提供了几个好处: 它们非常适合单元测试,因为它们不需要你设置任何外部资源。 通过使用相同的参数调用函数,很容易纯函数中重现 bug。...交互式 Shell 中输入以下内容,看看这是如何工作的。

    1.4K70

    Python 进阶指南(编程轻松进阶):六、编写 Python 风格的代码

    不幸的是,弄清楚如何使代码尽可能简单,而不是更简单,这通常很难做到。 命名空间是一个非常棒的想法——让我们多做一些吧!命名空间是标识符的独立容器,以防止命名冲突。...print(animal) ... cat dog moose 调用enumerate()并直接迭代一个序列比使用老式的range(len())约定更好。...相反,当执行离开with语句的块,可以使用with语句自动调用close()。...即使没有对close()的显式调用,当执行离开块,with语句也会自动调用它。 使用is而不是==与None进行比较, ==相等运算符比较两个对象的值,而is相同运算符比较两个对象的标识。...存储holiday中的值是get()方法调用的返回值,它返回season被设置的键的值。如果season键不存在,get()返回'Personal day off'。

    94460

    「R」R 的控制结构

    如果条件语句是由一个以上的逻辑值组成的向量,那么执行该语句只会用到向量的第 1 个元素。...("a") [1] "alligator" > switcheroo.switch("f") [1] "moose" 循环 R 中存在三种不同的循环结构。...另外一个有用的循环结构是 while,该结构某个条件为真,重复某个特定的表达式: while (condition) expression 上个例子可以用 while 写出来: > i <- 5 >...while (i <= 25) {print(i); i <- i + 5} [1] 5 [1] 10 [1] 15 [1] 20 [1] 25 同样地,我们可以while循环中使用 break 与...循环语句有两个需要记住的重要属性: 循环内的计算结果不打印屏幕上,除非你显式地调用 print 函数。 for 循环中的 var 变量命令环境中是变化的。

    84030

    Python 进阶指南(编程轻松进阶):七、编程术语

    调用someFunction(),Python 为列表['cat', 'dog', 'moose']分配内存。程序员不需要计算需要多少字节的内存,因为 Python 会自动管理。...但事实证明调用count() list 方法更快。 属性与特性 许多语言中,术语属性和特性被用作同义词,但是 Python 中这些词有不同的含义。...第 124 页“变量与属性”中解释的属性是与对象相关的名称。属性包括对象的成员变量和方法。 其他语言,比如 Java,有针对类的获取器和设置器方法。...程序必须调用属性设置器方法,而不是直接给属性赋值(可能是无效的)。设置器方法中的代码可以确保成员变量只被赋予一个有效值。获取器方法读取属性的值。... Python 中,属性允许程序员使用加简洁的语法实现获取器和设置器函数。第 17 章更详细地探讨了 Python 的属性

    1.6K20

    TransactionDefinition接口内容及属性

    ,事务管理器能够根据这个返回值进行优化,确保事务是只读的 }   我们可以发现TransactionDefinition正好用来定义事务属性,下面详细介绍一下各个事务属性。...当事务方法被另一个事务方法调用时,必须指定事务应该如何传播。例如:方法可能继续现有事务中运行,也可能开启一个新事务,并在自己的事务中运行。...只读属性   事务的只读属性是指,对事务性资源进行只读操作或者是读写操作。所谓事务性资源就是指那些被事务管理的资源,比如数据源、 JMS 资源,以及自定义的事务性资源等等。...如果确定只对事务性资源进行只读操作,那么我们可以将事务标志为只读的,以提高事务处理的性能。 TransactionDefinition 中以 boolean 类型来表示该事务是否只读。...但是,我们可以根据需要人为控制事务抛出某些未检查异常仍然提交事务,或者抛出某些已检查异常回滚事务。

    73400

    DSST详解

    CN paper 和KCF/DCF是同一期的,不同的是用了颜色通道,论文里作者比较了各种颜色空间的表现。 DSST paper DSST解决了另外一个关键问题,那就是尺度更新。...MOOSE基础 DSST是MOOSE的基础上来的,所以很有必要再回顾一下MOOSE,正好昨天看论文的时候把MOOSE里的公式的推到再看了看了一遍。...按照上面说的思路,我们需要找到一个滤波器,使其目标上的响应最大: ? 其中g是输出,f是输入,h是滤波器,输出我们给成一个高斯分布,目标点的值最大。...z是输入的特征图, lambda是为了防止分母为0。 DSST思想 1.1维滤波器用于评估目标尺度的变化,2维滤波器用于评估目标位置的变化,3维滤波器用于详尽的尺度空间中的目标定位。...伪代码 主要代码 主要代码dsst.m里,我写了比较详细的注释,放在下面可以帮助理解。

    1.5K30

    学习ASP.NET Core,怎能不了解请求处理管道: 服务器管道中的“龙头”地位

    如下面的代码片段所示,这个接口具有一个只读属性Features返回描述自身特性集合的FeatureCollection对象,另一个Start方法用于启动服务器。...除了实现接口IServer定义的Features属性之外,KestrelServer还具有一个类型为KestrelServerOptions的只读属性Options。...这个属性表示对KestrelServer所作的相关设置,我们调用构造函数通过输入参数options所代表的IOptions对象对这个属性进行初始化。...介绍如何通过编程的方式为服务器指定监听地址之前,我们有先来认识一个名为ServerAddressesFeature的特性。...不过,针对监听地址的显式设置,最直接的编程方式还是调用WebHostBuilder的扩展方法UseUrls,如下面的代码片段所示,该方法的实现逻辑与上面完全一致。

    55320

    java nio剖析

    java nio 的全称是 java new I/O ,即一个全新的 I/O 控制系统,它的 API 的包名为 java.nio ,是 jdk1.4 后引入的。...下面看如何使用它们: 1. 使用信道 信道的使用中,文件的信道是最具有代表性的, API 也是最多的,下面我们以文件信道为例介绍它。...ByteBuffer src, long position) 从给定的文件位置开始,将字节序列从给定缓冲区写入此通道 ● 使用文件锁 文件锁机制主要是多线程同时读写某个文件资源使用...内存映射,即调用FileChannel的map()方法。 ● 缓冲区基本属性 这几个属性是每个缓冲区都有的并且是常用的操作。 a....clear()方法:设置limit为capacity,position为0。 e. filp()方法:设置limit为当前position,然后设置position为0。

    47320

    SpringBoot 事务注解@Transactional

    如何使用 Mybatis中使用事务,非常简单,只需要在函数增加注解@Transactional,无需任何配置。...当作用于类上,该类的所有 public 方法将都具有该类型的事务属性,同时,我们也可以方法级别使用该标注来覆盖类级别的定义。...3.常用配置 参 数 名 称 功 能 描 述 readOnly 该属性用于设置当前事务是否为只读事务,设置为true表示只读,false则表示可读写,默认值为false。...例如:@Transactional(readOnly=true) rollbackFor 该属性用于设置需要进行回滚的异常类数组,当方法中抛出指定异常数组中的异常,则进行事务回滚。...事务只读属性 只读事务用于客户代码只读但不修改数据的情形,只读事务用于特定情景下的优化,比如使用Hibernate的时候。 默认为读写事务。

    73720

    SpringBoot事务注解@Transactional

    如何使用 Mybatis中使用事务,非常简单,只需要在函数增加注解@Transactional,无需任何配置。...当作用于类上,该类的所有 public 方法将都具有该类型的事务属性,同时,我们也可以方法级别使用该标注来覆盖类级别的定义。...3.常用配置 参 数 名 称 功 能 描 述 readOnly 该属性用于设置当前事务是否为只读事务,设置为true表示只读,false则表示可读写,默认值为false。...例如:@Transactional(readOnly=true) rollbackFor 该属性用于设置需要进行回滚的异常类数组,当方法中抛出指定异常数组中的异常,则进行事务回滚。...事务只读属性 只读事务用于客户代码只读但不修改数据的情形,只读事务用于特定情景下的优化,比如使用Hibernate的时候。 默认为读写事务。

    95811

    浅析JavaScript正则表达式

    仅当子表达式 X 此位置的右侧匹配才继续匹配。例如,/w+(?=/d) 与后跟数字的单词匹配,而不与该数字匹配。此构造不会回溯。 (?!=x) 零宽度负先行断言。...仅当子表达式 X 此位置的左侧匹配才继续匹配。例如,(?<=19)99 与跟在 19 后面的 99 的实例匹配。此构造不会回溯。 (?<!X) 零宽度负后发断言。...必须将 \ 替换成 \\ 第二个参数是可选的,只能传 g i m,或者它们的组合 var zipcode = new RegExp("\d{5}","g"); 1.RegExp属性 source...:是一个只读的布尔值,用以说明正则表达式是否带有修饰符m lastIndex:是一个可读/写的整数,如果匹配模式带有g修饰符,这个属性存储整个字符串的下一次检索的开始位置,会被exec(),test...()方法用到 2.RegExp方法 exec() 执行字符串的匹配检索,类似String.match(),都会返回一个数组 test() 当调用exec方法返回不为null则调用test方法返回为

    1.6K30

    LinuxMoose蠕虫:操纵路由器“帮你玩”社交网络

    ESET的安全研究员发表了一篇技术报告,报告中详细分析了一个新的蠕虫Linux/Moose。...Moose蠕虫分析 下图标中列出了Moose的功能: 在对僵尸网络的监控中,我们发现这种恶意软件可以从热门的社交网站中窃取未经过加密的HTTP Cookies,并且还可执行各种欺诈活动……例如“关注”...分析,我们经常问自己:难道他们付出了那么大的努力就是为了连接到社交网络?当然不排除说,关注、点赞、阅读量等还是有一定的市场的。所以攻击者也可能是为了赚钱更多的阅读量或者关注度而开发的这个病毒。...对此用户最好将设备恢复出厂设置,固件升级,重装系统,修改密码。 即使你的设备没有联网,也要更改默认密码。如果可以的话,禁用telnet登录,使用SSH。...如果你不知道如何测试你的设备有没有连接这些端口,你可以使用ShieldsUP service from GRC.com的“常用端口”对系统进行扫描,以确保上述的几个端口是关闭的。

    1.1K100

    【TypeScript 演化史 — 第二章】基于控制流的类型分析 和 只读属性

    由于提前的退出行为,command 参数的类型 if 语句之后被限制为string[]。因此,对 join 方法的调用将正确地检查类型。...radius 和 area 属性都可以从类外部读取(因为它们都不是私有(private)的),但是不能写入(因为它们都是只读(readonly)的): const unitCircle = new Circle...它只被编译器用来检查非法的属性分配。一旦TypeScript代码被编译成JavaScript,所有readonly的概念都消失了。您可以随意摆弄这个小示例,看看如何转换只读属性。...radius 和 area 属性都可以从类外部读取(因为它们都不是私有(private)的),但是不能写入(因为它们都是只读(readonly)的): const unitCircle = new Circle...它只被编译器用来检查非法的属性分配。一旦TypeScript代码被编译成JavaScript,所有readonly的概念都消失了。您可以随意摆弄这个小示例,看看如何转换只读属性

    2K10

    误执行了rm -fr *之后,除了跑路还能怎么办?!

    哈哈哈,小林没跑路,反而是恢复了回来,所以接下来说说小林是如何「从删库到恢复」的。 初探案发现场 来看看小林写的垃圾代码,是如何引发这次的删库。 ?...细心的小伙伴肯定察觉出来了,是因为给 new_lic_dir 变量赋值的使用了反引号。 ? 没错,就是反引号的原因。...实现思路: 删除文件,它并不真正执行删除操作,而是将文件移动到一个特定目录,可以设置定时清除回收站,或者回收站里面的文件大小达到一定容量(或者用时间做判断)执行删除操作以腾出空间。...: 0 0 * * * rm -rf /home/.trash/* 5)最后,执行以下命令,使之生效 source ~/.bashrc 5、根文件挂载成只读 /etc/fstab 文件,把 / 文件系统挂载成只读的方式...其中 remount,ro,就表示只读的方式挂载。 只读的方式挂载后,进行删除操作是无法成功的: ?

    1.7K20
    领券