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

时间:2011-02-19 10:24:53

标签: variables types perl6 rakudo-star

#!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

2 个答案:

答案 0 :(得分:8)

您始终可以手动转换为Int

( $m.Int div $n.Int ).say;

实际上我希望这个前缀:&lt; +&gt;将在

中工作
( +$m div +$n ).say;

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

更新:+$m现在有效。

答案 1 :(得分:4)

我认为第二种形式也应该起作用(首先强制对Int,然后进行整数除法)。我将从其他Perl 6开发人员那里获得一些反馈,并在他们同意的情况下修复它。 (更新:结果是中缀:显然不是强制性的,而是被指定返回与参数相同类型的值。这对于Str通常不起作用。)

Pat指出,+$m也应该有用,这是Rakudo的长期限制。

一般来说,使用$variable.Typename对类型进行强制攻击,我相信这适用于今天Rakudo中的所有数字类型。