【发布时间】:2016-04-14 16:45:04
【问题描述】:
我在玩 Rakudo Star 2015.09。
如果我尝试用前导零对整数进行字符串化,编译器会发出警告:
> say (~01234).WHAT
Potential difficulties:
Leading 0 does not indicate octal in Perl 6.
Please use 0o123 if you mean that.
at <unknown file>:1
------> say (~0123<HERE>).WHAT
(Str)
我想也许我可以通过将整数值分配给变量来帮助编译器,但得到了相同的结果:
> my $x = 01234; say (~$x).WHAT
Potential difficulties:
Leading 0 does not indicate octal in Perl 6.
Please use 0o1234 if you mean that.
at <unknown file>:1
------> my $x = 01234<HERE>; say (~$x).WHAT
(Str)
我知道这是一个愚蠢的例子,但这是设计使然吗?如果有,为什么?
我怎样才能抑制这种警告信息?
【问题讨论】:
-
我会说答案是“不要使用模棱两可的文字”。
-
@IgnacioVazquez-Abrams :
> my $x = sprintf "%05d", 1234; say (~$x).WHAT不会发出警告 -
那是因为
"%05d"和1234都是明确的。 -
@IgnacioVazquez-Abrams :我认为你正在做某事......
my $x = sprintf "%05d", 01234;...导致警告 -
也可以通过使用像
IntStr这样的同构值来保留数字的字符串表示,例如通过val("01234")或< 01234 >