gpt4 book ai didi

perl - 抑制重载运算符的无效上下文警告

转载 作者:行者123 更新时间:2023-12-05 00:34:37 25 4
gpt4 key购买 nike

有没有办法在调用者中为重载运算符抑制特定警告?

背景:我正在查看一个重载的模块 <=>=实现一种声明性领域特定的语言。不管这是否是一个好主意,这些运算符在 void 上下文中使用时会抛出“在 void 上下文中无用”警告。就像是:

package Boundary;

use strict;
use overload ('<=' => \&set_min, '>=' => \&set_max);

sub new { my ($class, $min, $max) = @_; bless [ $min, $max ], $class; }
sub set_min { my $self = shift; $self->[0] = shift; }
sub set_max { my $self = shift; $self->[1] = shift; }

package main;

# user code
use warnings;

my $bound = Boundary->new();
$bound >= 1; # Useless use of numeric ge (>=) in void context at ...
$bound <= 10; # Useless use of numeric le (>=) in void context at ...

有没有办法仅针对重载调用抑制警告,而调用者不必显式禁用“无效”警告?

最佳答案

Perl 希望您在重载运算符时保留现有的语义。例如它有时会优化否定。你在玩火。

$ perl -MO=Concise,-exec -e'$y = !$x;'
1 <0> enter
2 <;> nextstate(main 1 -e:1) v:{
3 <$> gvsv(*x) s
4 <1> not sK/1 <--- "not" operator
5 <$> gvsv(*y) s
6 <2> sassign vKS/2
7 <@> leave[1 ref] vKP/REFC
-e syntax OK

$ perl -MO=Concise,-exec -e'if (!$x) { f() }'
1 <0> enter
2 <;> nextstate(main 3 -e:1) v:{
3 <$> gvsv(*x) s
4 <|> or(other->5) vK/1 <--- No "not" operator
5 <0> pushmark s
6 <$> gv(*f) s/EARLYCV
7 <1> entersub[t1] vKS/TARG,1
8 <@> leave[1 ref] vKP/REFC
-e syntax OK

关于perl - 抑制重载运算符的无效上下文警告,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10484047/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com