.jl文件:应用方案和功能
本评论涉及.jl
文件。具体来说,这些应用包括
- 创建自定义模块
- 使用某些脚本
- 代码调试
- 运行服务器应用程序
创建自定义模块
与.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
)
为什么不用类似的功能替换generate_student_folders.jl
脚本?
使用脚本的方便之处在于,在脚本中,与函数不同,您可以使用using
和import
. 。
也就是说,我们可以调用一个单独的进程 ,在其中连接包 ,执行操作 ,然后返回主程序。
请注意,我们在程序
generate_student_folders.jl
中使用了软件包CSV
,但这个软件包在我们的脚本中没有连接。
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))
