Имя вашего пакета (корень вашего локального дерева) должно соответствовать имени файла, который существует в каталоге src. Попробуйте следующее:
SeqScan/
|-- src/
|-- SeqScan.jl (your seq.jl)
Я не знаю, почему вы вставляете модуль Seq в SeqScan. Если нет важной причины для этого, вы можете получить доступ к типу более непосредственно. Вы можете удалить «модуль Seq» и парный «конец». Тогда просто «использование SeqScan» приведет к типу SeqEntry.
Тип, SeqEntry, как написано, знает, что делать, если заданы четыре значения полей, по одному для каждого из определенных полей. Если вы хотите инициализировать этот тип только двумя первыми полями, вам нужно включить конструктор с двумя аргументами. Например, если предположить SEQ является вектором некоторого числового типа и оценки также является вектором этого числового типа и и seq_type является числовой тип:
function SeqEntry(id, seq)
seq_type = typeof(seq[1])
scores = zeros(seq_type, length(seq))
return SeqEntry(id, seq, scores, seq_type)
end
Пример пакета с внутренними модулями, для Джулии v0. 5.
Пакет имеет имя MyPackage.jl; он включает в себя два внутренних модуля: TypeModule и FuncModule; каждый модуль имеет свой собственный файл: TypeModule.jl и FuncModule.jl.
TypeModule содержит новый тип MyType. FuncModule содержит новую функцию MyFunc, которая работает с переменной [s] MyType. Существуют две формы этой функции: версия 1-arg и 2-arg.
MyPackage использует оба внутренних модуля. Он включает в себя каждый для немедленного использования и инициализирует две переменные MyType. Затем MyPackage применяет MyFunc к ним и печатает результаты.
Я предполагаю, что каталог пакетов Джулии «/you/.julia/v0.5» (Windows: «c: \ you.julia \ v0.5») и ссылается на него как PkgDir. Вы можете найти реальный каталог пакетов, набрав Pkg.dir() в интерактивном приглашении Julia. Первое, что нужно сделать, убедитесь, что внутренняя информация Юлии актуальна: > Pkg.update()
, а затем получить специальный пакетный вызов PkgDev: > Pkg.add("PkgDev")
Вы можете начать свой пакет на GitHub. Если вы начинаете его локально, вы должны использовать PkgDev, потому что он создает необходимый файл пакета (и другие), используя нужную структуру: > using PkgDev
затем > PkgDev.generate("MyPackage","MIT")
Это также создает файл LICENSE.md с лицензией Julia. Вы можете сохранить его, заменить или удалить.
В каталоге PkgDir/MyPackage/src создайте подкаталог «внутренний». В каталоге PKGDIR/MyPackage/SRC/внутренний, создать два файла: "TypeModule.jl" и "FuncModule.jl", это:
TypeModule.jl:
module TypeModule
export MyType
type MyType
value::Int
end
end # TypeModule
FuncModule.jl:
module FuncModule
export MyFunc
#=
!important!
TypeModule is included in MyPackage.jl before this module
This module gets MyType from MyPackage.jl, not directly.
Getting it directly would create mismatch of module indirection.
=#
import ..MyPackage: MyType
function MyFunc(x::MyType)
return x.value + 1
end
function MyFunc(x::MyType, y::MyType)
return x.value + y.value + 1
end
end # FuncModule
И в каталоге Src, редактировать MyPackage.jl так соответствует этому:
MyPackage.jl:
module MyPackage
export MyType, MyFunc
#=
!important! Do this before including FuncModule
because FuncModule.jl imports MyType from here.
MyType must be in use before including FuncModule.
=#
include(joinpath("internal", "TypeModule.jl"))
using .TypeModule # prefix the '.' to use an included module
include(joinpath("internal", "FuncModule.jl"))
using .FuncModule # prefix the '.' to use an included module
three = MyType(3)
five = MyType(5)
four = MyFunc(three)
eight = MyFunc(three, five)
# show that everything works
println()
println(string("MyFunc(three) = ", four))
println(string("MyFunc(three, five) = ", eight))
end # MyPackage
Сейчас работает Юлия ввод > using MyPackage
должна показать это:
julia> using MyPackage
4 = MyFunc(three)
9 = MyFunc(three, five)
julia>
ли перезапуску Джулии после изменения пути загрузки? Кроме того, я думаю, вы хотите, чтобы имя модуля соответствовало как директории, так и имени файла. – ARM
Я запустил файл 'test_seq.jl' из командной строки, а не REPL. У нас есть какая-либо конкретная информация о сопоставлении имен модулей/dir/файлов? - Я не вижу, что в документах – maasha
См. Http://docs.julialang.org/en/release-0.5/manual/modules/ об именах и путях файлов. Если модуль находится на вашем пути, вы должны использовать его с использованием «TestSeq» в REPL или скрипте, а не для запуска основного файла сценария из командной строки. Взгляните на структуру существующих пакетов Julia в каталоге вашего пакета: http://docs.julialang.org/en/release-0.5/manual/packages/ – ARM