perl6/rakudo:如何更改变量的数据类型?

sid*_*com 4 variables types perl6 rakudo-star raku

#!perl6
use v6;

my $m = 70;
my $n = 30;

( $m div $n ).say;
Run Code Online (Sandbox Code Playgroud)

第一个例子有效,但第二个没有.我想这是因为在第二个例子中,变量值是字符串.如果我的猜测是正确的,我怎么能将字符串变量更改为整数变量?

#!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
Run Code Online (Sandbox Code Playgroud)

Pat*_*Pat 8

您始终可以手动转换为Int

( $m.Int div $n.Int ).say;
Run Code Online (Sandbox Code Playgroud)

实际上我希望前缀:<+>可以正常工作

( +$m div +$n ).say;
Run Code Online (Sandbox Code Playgroud)

但它只是"Num"ifies和sig需要"Int",我不确定它是否应该这样.

更新:+$m现在有效.


mor*_*itz 5

我有点认为第二种形式也应该起作用(先强制为Int,然后进行整数除法)。我将从其他Perl 6开发人员那里得到一些反馈,如果他们同意的话,请进行修复。(更新:原来,infix:显然不是强制性的,而是规定返回与参数相同类型的值。通常不适用于Str)。

正如Pat指出的那样,它+$m也应该起作用,这在Rakudo中是一个长期的限制。

通常,对类型的强制转换是通过完成的$variable.Typename,并且我相信这对Rakudo中的所有数字类型都适用。