4

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

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

my $x = .1e-003 ;

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

4

3 回答 3

8

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

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

用法:

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

say .1e-003 # "300-e1."
于 2014-11-16T21:48:16.720 回答
3

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

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

可以缩短为

0.0001 but ".1e-003"

请注意,从语义的角度来看,提供一个方法Stringy而不是Str实际上可能更合适,但我不认为 Rakudo 到今天为止在所有情况下都正确处理了这种区别。

于 2014-11-16T11:17:55.700 回答
1

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

更简洁的方法可能是将这些常量中的每一个都包装在宏调用中,而不是用一个来跨越整个程序。

于 2014-11-15T19:26:19.210 回答