perl6 / rakudo: Как я могу изменить тип данных переменной? - PullRequest
4 голосов
/ 19 февраля 2011
#!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 ]

8 голосов
/ 19 февраля 2011

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

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

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

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

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

ОБНОВЛЕНИЕ: +$m теперь работает.

4 голосов
/ 19 февраля 2011

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

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

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

...