perl6 / rakudo:如何更改变量的数据类型?
-
15-11-2019 - |
题
#!perl6
use v6;
my $m = 70;
my $n = 30;
( $m div $n ).say;
.
第一个示例工作,但第二个例子没有。我想它是因为在第二个例子中,变量值是字符串。如果我的猜测是对的,我如何将字符串变量更改为整数变量?
#!perl6
use v6;
my $m = '70';
my $n = '30';
( $m div $n ).say;
# No applicable candidates found to dispatch to for 'infix:<div>'.
# Available candidates are:
# :(Int $a, Int $b)
# in main program body at line 7:./perl5.pl
. 解决方案
You can always manually cast to Int
( $m.Int div $n.Int ).say;
Actually I would have hoped that prefix:<+> would work as in
( +$m div +$n ).say;
But it just "Num"ifies and the sig requires "Int", I am not sure if it should be this way or not.
UPDATE: +$m
now works.
其他提示
I kinda think that the second form should work too (coerce to Int first, and then do integer division). I'll get some feedback from the other Perl 6 developers, and fix it if they agree. (Update: turns out that infix: is explicitly not coercive, but rather is specced to return a value of the same type as the arguments. Which won't work for generally for Str).
As Pat pointed out, +$m
should also work, that's a long standing limitation in Rakudo.
In general, coercion to a type is done with $variable.Typename
, and I believe this works for all numeric types in Rakudo today.