Разобрать из String и преобразовать в float, integer (Raku) - PullRequest
4 голосов
/ 25 марта 2020

FAQ: Как в Raku разобрать String и получить Number ? Например:

xxx("42");  # 42 (Int)
xxx("0x42");  # 66 (Int)
xxx("42.123456789123456789");  # 42.123456789123456789 (Rat)
xxx("42.4e2");  # 4240 (Rat)
xxx("42.4e-2");  # 0.424 (Rat)

Ответы [ 2 ]

4 голосов
/ 25 марта 2020

Просто используйте префикс + :

say +"42";  # 42 (Int)
say +"0x42";  # 66 (Int)
say +"42.123456789123456789";  # 42.123456789123456789 (Rat)
say +"42.4e2";  # 4240 (Rat)
say +"42.4e-2";  # 0.424 (Rat)
  • Информация

val Str рутина делает именно то, что вы (I) хотите.

Остерегайтесь того, что она возвращает объект Allomorph . Используйте unival или просто + префикс , чтобы преобразовать его в Число

  • Ссылки:

  • Learning Raku : число, строки и числовые строки Allomorphs

  • Тот же вопрос в Python, Perl
  • Код Розеты : Определите, является ли строка цифрой c

Отредактировано благодаря комментарию @Holli

3 голосов
/ 26 марта 2020
my regex number {
    \S+                     #grab chars 
    <?{ defined +"$/" }>    #assertion that coerces via '+' to Real
}

#strip factor [leading] e.g. 9/5 * Kelvin
if ( $defn-str ~~ s/( <number>? ) \s* \*? \s* ( .* )/$1/ ) {
    my $factor = $0;
    #...
}
...