Не удалось найти List::Util

Я пытаюсь скомпилировать код раку, который я видел на https://replit.com/languages/raku . Код взят из Почему Раку сообщает "два термина подряд", когда я определяю новый оператор?.

Это начинается так:

unit module Format;
use List::Util;
...

Не удается скомпилировать с:

 raku ./main.raku
===SORRY!=== Error while compiling /home/runner/l4gp3hvdnhd/./main.raku
Could not find List::Util in:
    inst#/home/runner/.raku
    inst#/opt/rakudo-pkg/share/perl6/site
    inst#/opt/rakudo-pkg/share/perl6/vendor
    inst#/opt/rakudo-pkg/share/perl6/core
    ap#
    nqp#
    perl5#
at /home/runner/l4gp3hvdnhd/./main.raku:3
exit status 1

С другой стороны, я вижу, что это правильный модуль - https://raku.land/zef:lizmat/List::Util.

Почему это не удается?

Вы действительно установили модуль с помощью zef ? zef install List::Util ?

Elizabeth Mattijsen 06.02.2023 11:03

Я использую онлайн-компилятор — replit.com/languages/raku. Означает ли это, что этот код нельзя использовать с компилятором онлайн-площадки?

sashoalm 06.02.2023 12:54

Боюсь, что так. Кроме того, похоже, что при воспроизведении используется версия Raku почти двухлетней давности (v2021.03). Так что, возможно, это не лучшее место, чтобы попробовать Раку.

Elizabeth Mattijsen 06.02.2023 12:58

Немного не согласен с Лиз. Совсем немного, но вы можете использовать этот код с replit. По крайней мере, вы можете, если вы достаточно терпеливы, чтобы дождаться полнолуния и быть добрыми к своим гремлинам. Для более полного объяснения см. мой ответ.

raiph 06.02.2023 18:13
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
5
4
133
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

У вас не установлен List::Util. Поскольку вы используете онлайн-переводчик, у вас, скорее всего, возникнут большие проблемы с этим. Вместо этого я рекомендую установить Raku на ваш локальный компьютер с помощью rakubrew.

Затем выполните следующие команды:

rakubrew build # Make sure to follow the instructions at the end
rakubrew build-zef
zef install List::Util

Теперь вы сможете запустить свой код на локальном компьютере, и у вас будет доступ к библиотеке List::Util.

Ответ принят как подходящий

TL;DR Запусти zef install --/test List::Util в консоли, поставь use lib '.'; в верхней части своего Раку main.raku и беги, а не ходи, со своей программой, прежде чем гремлины радостно превратят ваши усилия в напрасные. Или, может быть, просто послушать Лиз и Роули.


Как отметили Лиз и Роули, вам необходимо установить List::Util.

Но хотя я в значительной степени согласен с ними на практике (может быть сложно использовать повторение, чтобы сделать то, что вы пытаетесь сделать), я думаю, что другой ответ, дополняющий их, может быть полезен.


Один из способов, которым Replit пытается отличиться от других онлайн-оценщиков, заключается в том, что он пытается быть похожим на полноценную среду разработки.

На самом деле это только начало их амбициозного проекта, и нищие не могут выбирать (если вы не платите, трудно жаловаться, если что-то идет не так, как вам хотелось бы), но это особенно важно для этого. Стоит отметить, что у него есть средства консоли / оболочки, и они установили Rakudo Star или, возможно, что-то подобное, включая менеджер пакетов Raku, которым почти все пользуются (zef).

Таким образом, эта команда, которую я только что запустил в консоли повторения нового сеанса раку, сработала:

zef install --/test List::Util;

(--/test говорит zef не запускать тесты. У меня есть только бесплатная учетная запись, и похоже, что replit убил процесс zef, когда я запускал только zef install List::Util во время его выполнения тестов. Предположительно, они занимают слишком много времени, но я не знать.)

И тогда это main.raku также сработало:

use lib '.';              # Tell Raku(do) libs are in current directory.
use List::Util <notall>;  # Load and import `notall` from module.
say notall { 42 }, 99;    # Try it.

Но теперь загвоздка. Пока я писал этот ответ, произошло ожидаемое. Мое подключение к Интернету на мгновение оборвалось, повтор перезагрузил сеанс, и, хотя мой main.raku код был спасен, и List::Util, и моя история консоли исчезли, поэтому мне пришлось снова вставить команду установки и перезапустить ее, чтобы снова установить модуль.

Это всего лишь магия одноразового контейнера, и до сих пор было сделано так много повторений, чтобы симуляция реальной полной локальной среды разработки действительно работала.

Может быть, если ваше интернет-соединение стабильно, и/или вы используете платную учетную запись, и/или сейчас полнолуние, все сработает. Или, может быть, вам лучше последовать совету Роули.


Говоря об этом (я имею в виду совет Роули настроить среду разработки Raku локально), если вы устанавливаете локально, вы также можете установить потрясающую бесплатную версию CommaIDE.

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