当前位置:  开发笔记 > 编程语言 > 正文

Perl6字符串强制运算符〜不喜欢前导零

如何解决《Perl6字符串强制运算符〜不喜欢前导零》经验,为你挑选了1个好方法。

我正在玩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 :1
    ------> say (~0123).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 :1
    ------> my $x = 01234; say (~$x).WHAT
(Str)

我知道这是一个愚蠢的例子,但这是设计的吗?如果是这样,为什么?

我怎么能抑制这种警告信息呢?



1> brian d foy..:

你有数据带有前导零的原因吗?当我有一列邮政编码时,我倾向于遇到这个问题.

当他们第一次考虑Perl 6时,其中一个目标是清理一些一致性问题.我们有0x0b(我认为到那个时候),但Perl 5中仍然不得不寻找领先0猜测这将是八进制.参见概要2中的Radix标记.

但是,Perl 6还必须关注Perl 5程序员将要尝试做什么以及他们期望什么.大多数人都期望导致0八进制.但是,这并不意味着八进制.这是你键入文字,而不是你如何使用它.Perl 6有很多关于Perl 5人试图使用的东西的警告,例如foreach:

$ perl6 -e 'foreach @*ARGS -> $arg { say $arg }' 1 2 3
===SORRY!=== Error while compiling -e
Unsupported use of 'foreach'; in Perl 6 please use 'for' at -e:1
------> foreach? @*ARGS -> $arg { say $arg }

为了抑制那种警告,不要做它警告你的事情.该语言不希望您这样做.如果需要字符串,请以字符串开头'01234'.或者,如果您希望它是八进制,请从...开始0o.但是,要意识到对数字进行字符串化将使您返回十进制表示:

$ perl6 -e 'say ~0o1234'
668


最后的问题呢?警告可以被抑制吗?
推荐阅读
围脖上的博博_771
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有