perl6/rakudo: Как я могу изменить тип данных переменной?

#!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 ответа

Решение

Вы всегда можете вручную привести к Int

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

На самом деле я бы надеялся, что префикс:<+> будет работать как в

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

Но это просто "Num"ifies, а sig требует "Int", я не уверен, так ли это должно быть или нет.

ОБНОВИТЬ: +$m в настоящее время работает.

Я вроде думаю, что вторая форма тоже должна работать (сначала привести к Int, а затем сделать целочисленное деление). Я получу отзывы от других разработчиков Perl 6 и исправлю их, если они согласятся. (Обновление: выясняется, что infix: явно не принудительный, а скорее предназначен для возврата значения того же типа, что и аргументы. Что в общем случае не будет работать для Str).

Как отметил Пат, +$m также должно работать, это давнее ограничение в Rakudo.

Как правило, приведение к типу осуществляется с помощью $variable.Typenameи я считаю, что это работает для всех числовых типов в Rakudo сегодня.

Другие вопросы по тегам