gpt4 book ai didi

raku - Raku(即 Perl6)中是否有范围/Num 等的 'clamp' 方法/子?

转载 作者:行者123 更新时间:2023-12-04 10:13:56 25 4
gpt4 key购买 nike

Perl6 中是否有“clamp”或等效方法或子方法?
例如

my $range= (1.0 .. 9.9)
my $val=15.3;

my $clamped=$range.clamp($val);
# $clamped would be 9.9

$val= -1.3;
$clamped=$range.clamp($val);
# $clamped would be 1.0

最佳答案

您可能想探索的另一种技巧是使用 Proxy ,它允许您在从容器中获取或存储值时定义“钩子(Hook)”

sub limited-num(Range $range) is rw {
my ($min, $max) = $range.minmax;
my Numeric $store = $min;
Proxy.new(
FETCH => method () { $store },
STORE => method ($new) {
$store = max($min, min($max, $new));
}
)
}

# Note the use of binding operator `:=`
my $ln := limited-num(1.0 .. 9.9);
say $ln; # OUTPUT: 1

$ln += 4.2;
say $ln; # OUTPUT: 5.2

$ln += 100;
say $ln; # OUTPUT: 9.9

$ln -= 50;
say $ln; # OUTPUT: 1

$ln = 0;
say $ln; # OUTPUT: 1

这个特殊的 limited-num将使用它的最小值进行初始化,但您也可以在声明时设置它
my $ln1 := limited-num(1.0 .. 9.9) = 5.5;
say $ln1; # OUTPUT 5.5;

my $ln2 := limited-num(1.0 .. 9.9) = 1000;
say $ln2; # OUTPUT 9.9

关于raku - Raku(即 Perl6)中是否有范围/Num 等的 'clamp' 方法/子?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55250700/

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