Perl 6中的重载常量

问题描述 投票:4回答:3

是否可以在Perl 6中重载常量? Here是我正在查看的Perl 5示例。

特别是我希望获得使用的文字值的字符串,例如如果代码是

my $x = .1e-003 ;

我需要".1e-003"而不是0.0001

perl operator-overloading perl6 raku
3个回答
8
投票

我刚刚添加了这样的模块:

https://github.com/FROGGS/p6-overload-constant

用法:

use v6;
sub decimal { $^a.flip }
use overload::constant &decimal;

say .1e-003 # "300-e1."

3
投票

您可以通过与but运算符以适当的角色混合来更改值的字符串化方式,即

but

可以缩写为

0.0001 but role { method Str { ".1e-003" } }

注意,从语义的角度来看,提供一种方法0.0001 but ".1e-003" 而不是Stringy实际上更合适,但我认为截至目前,乐天堂在所有情况下都无法正确处理这种区别。


1
投票

我不认为规范或现有库中存在Stringy之类的东西,但是应该可以通过[AST]查找您感兴趣的文字类型,从而使用Str来编写它,然后将其替换为对象构造函数或您需要的任何东西。

更清洁的方法可能是将这些常量中的每个常量包装在一个宏调用中,而不是用一个整数来覆盖整个程序。

© www.soinside.com 2019 - 2024. All rights reserved.