Есть несколько проблем.
Модули не заканчиваются на .raku
. Они заканчиваются .rakumod
или .pm6
(на данный момент).
(Технически после установки фактически не имеет значения, какое расширение у вас, если оно правильно объявлено в META6.json
.)
По умолчанию подпрограммы лексически ограничены (my
), а также не экспортируются по умолчанию.
Таким образом, нет никакого доступа к hello()
вне модуля, который он определил in.
Модули не имеют методов, поэтому вы не можете вызывать hello
в качестве метода.
Даже если у них есть методы, они не начнут с sub
ключевое слово.
Вы можете глобально задать подпрограмму с помощью our
:
lib/MyModule.rakumod
use v6.d;
unit module MyModule;
our sub hello () { say 'hello' }
#^
# \
# globally scoped
main.raku
use v6.d;
# use lib './lib';
use module MyModule;
MyModule::hello();
# ^^
# \
# namespace delimiter
Вы можете экспортировать его вместо:
lib/MyModule.rakumod
use v6.d;
unit MyModule;
# mark for export
# v-------v
sub hello () is export {
say 'hello'
}
main.raku
use v6.d;
# use lib './lib';
use MyModule;
hello();
В дополнение к is export
, есть другие более мелкозернистые способы экспорта .
. Я бы порекомендовал вам, если вы собираетесь экспортировать, что вы также делаете это глобально с our
. Таким образом, если кто-то использует ваш модуль, но не хочет импортировать ваши сабвуферы; они все еще имеют к ним доступ.