创建自定义模块¶
与.ngscript
文件不同,扩展名为.jl
的文件可用于创建自定义模块。
让我们考虑 2 个文件。
1.MyModule.jl
2._MyScriptModule.ngscript
两个文件都包含内容相同的模块:MyModule
和MyScriptModule
。
但对于.jl
文件,我们可以使用以下方式连接模块:
include("MyModule.jl")
using .MyModule
area(Rectangle(2,3))
但如果使用.ngscript
,则无法连接模块:
try
include("_MyScriptModule.ngscript")
using .MyScriptModule
area(Rectangle(2,3))
catch e
println(e)
end
自动执行操作¶
假设有一张学生及其作业库的表格。
| Git 仓库 | ------- | --- | --- | --------------------------------------- | | Ivanov | I. | I. | git@github.com:Ivanov/Julia_course.git | git@github.com:Ivanov/Julia_course.git | | 帕洛夫 | P. | P. | | | | | | | | Petrov | P. | P. | git@github.com:Petrov/Julia_course.git | | Sidorov | I. | P. | git@github.com:Sidorov/Julia_course.git | git@github.com:Sidorov/Julia_course.git |
一位教师同时向几个小组教授一门课程。
然后,使用.jl
文件,可以检查家庭作业、
将所有文件自动复制到相应 文件所在的同一目录中。
相应的.jl
文件所在的同一目录。
注意,现在目录中没有文件夹。
让我们执行下面的单元格来重现这种情况。 执行单元代码后,目录中将出现文件夹:
jl-files
伊万诺夫
│ └──── Seminar_1
├─── 彼得罗夫
│ └──── Seminar_1
└──── Sidorov
└───研讨会_1
下一个单元格将对执行的内容进行说明。
run(`bash -c """
julia generate_student_folders.jl students_group_1.csv Семинар_1
"""`)
- 函数
run
可以运行命令。 -bash -c
表示 "在 bash shell 中执行 命令"。 -julia
-juila программа.jl аргумент_1 аргумент_2 ...
-generate_student_folders.jl
- 创建文件夹并克隆学生资源库的文件 -ARGS[1]
- 包含数据的文件名 (students_group_1.csv
) -ARGS[2]
- 要检查的班级/作业的名称 (Семинар_1
)
try
df = CSV.read("students_group_1.csv", DataFrame);
catch e
sprint(showerror,e)
end
代码调试¶
虽然脚本中也可以进行代码调试,但.jl
文件比脚本更有优势。原因就在这里:
.ngscript
代表json
文件。
例如,_sqrt_16.ngscript
文件是一个json
文件,其中有
# 文件中关于第一个文本格的部分
"id": "ffe36da1"、
"cell_type": "markdown"、
}, "source":[
"Value$\\sqrt{16}$"
],
# 关于第一个单元格的部分代码
"id": "a4b6a26f"、
"cell_type": "code"、
"源":[
"sqrt(16)" [
],
因此,调试这样的文件实际上是一项非同小可的任务。 让我们确保
调试.ngscript
文件¶
让我们在当前.ngscript
- 文件中创建函数circle_area
。
"Площадь круга по радиусу"
function circle_area(r)
π*r^2
end
通过@functionloc
,我们可以找到文件名和要调用的方法的字符串。
@functionloc circle_area(2)
我们可以看到,文件名没有返回,而字符串是单元格的第 2 行(在我们的函数 "圆面积乘半径 "的描述之后)。
调试.jl
-files¶
但.jl
-files 就没有这个问题。文件MyModule.jl
中声明的函数area
的位置打印得非常清楚:
@functionloc area(Rectangle(2,3))