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 сегодня.