在Perl 6中重载常量

时间:2014-11-15 17:02:54

标签: perl operator-overloading perl6

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

特别是我想获得一个使用的字面值的字符串,例如如果代码是

my $x = .1e-003 ;

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

3 个答案:

答案 0 :(得分:7)

我刚添加了这样一个模块:

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

用法:

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

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

答案 1 :(得分:3)

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

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

可以缩短为

0.0001 but ".1e-003"

请注意,从语义的角度来看,提供方法Stringy而不是Str实际上可能更合适,但我不认为Rakudo在今天正确处理这种区别。< / p>

答案 2 :(得分:1)

我认为规范或现有库中不存在overload::constant之类的内容,但是应该可以使用macros来编写它,方法是在AST中查找您的文字类型感兴趣,并用对象构造函数或任何你需要的东西替换它。

也许,更干净的方法是将这些常量中的每一个包装在一个宏调用中,而不是将整个程序包含在一个宏调用中。