Domanda

#!perl6
use v6;

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

( $m div $n ).say;
.

I primi esempi funzionano, ma il secondo no.Suppongo che sia perché nel secondo esempio i valori variabili sono stringhe.Se la mia ipotesi ha ragione, come potrei cambiare le variabili di stringa per le variabili integer?

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

È stato utile?

Soluzione

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.

Altri suggerimenti

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.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top