Engee 文档
Notebook

.jl文件:应用场景和功能

审查致力于 .jl 文件。 即,应用程序,如:
-创建自定义模块
-使用某些场景
-调试代码
-启动服务器应用程序

创建自定义模块

与文件不同 .ngscript,扩展名的文件 .jl 您可以使用它来创建自己的模块。

考虑2个文件。

  1. MyModule.jl
  2. _MyScriptModule.ngscript

这两个文件都包含具有相同内容的模块。: MyModuleMyScriptModule 相应地。
但对于 .jl-然后我们可以使用连接模块:

In [ ]:
include("MyModule.jl")
using .MyModule

area(Rectangle(2,3))

但是,使用 .ngscript,将不再可能连接模块:

In [ ]:
try
    include("_MyScriptModule.ngscript")
    using .MyScriptModule

    area(Rectangle(2,3))
catch e 
    println(e)
end
LoadError("/user/start/examples/project_management/jl_files_usage/_MyScriptModule.ngscript", 1, ErrorException("syntax: { } vector syntax is discontinued around /user/start/examples/project_management/jl_files_usage/_MyScriptModule.ngscript:1"))

自动执行操作

想象一下,有一个学生和他们的存储库与家庭作业的表。

/姓/和。 /O./Git仓库|
| ------- | --- | --- | --------------------------------------- |
/伊万诺夫/I./和。 |git@github.com:Ivanov/Julia_course.git |
|巴甫洛夫/P./P.||
|彼得罗夫/P./P.|git@github.com:Petrov/Julia_course.git |
/西多罗夫/I./P.|git@github.com:Sidorov/Julia_course.git |

老师一次分几个小组教授某一学科.


然后,使用 .jl-文件可以检查作业
通过将所有文件自动复制到目录
对应的文件所在的位置。 .jl-文件。


请注意,目前目录中没有文件夹。

让我们通过执行下面的单元格来重新创建这种情况。
执行单元格代码后,文件夹将出现在您的目录中:

jl-档案
──伊万诺夫
,──Seminar_1
,──彼得罗夫
,──Seminar_1
,──西多罗夫
    ,──Seminar_1
`` A
将在下一个单元格中给出正在执行的操作的描述。

In [ ]:
run(`bash -c """

julia generate_student_folders.jl students_group_1.csv Семинар_1

"""`)
ARGS = ["students_group_1.csv", "Семинар_1"]
df = 4×4 DataFrame
 Row │ Фамилия   И.       О.       GitHub
     │ String15  String3  String3  String?
─────┼───────────────────────────────────────────────────────────────
   1 │ Иванов    И.       И.       git@github.com:Ivanov/Julia_cour…
   2 │ Павлов    П.       П.       missing
   3 │ Петров    П.       П.       git@github.com:Petrov/Julia_cour…
   4 │ Сидоров   И.       П.       git@github.com:Sidorov/Julia_cou…
Out[0]:
Process(`bash -c '

julia generate_student_folders.jl students_group_1.csv Семинар_1

'`, ProcessExited(0))

-功能 run 它可以运行命令。

  • bash -c 表示"在bashshell中执行command"。
  • julia - juila программа.jl аргумент_1 аргумент_2 ...
  • generate_student_folders.jl -创建文件夹并在其中克隆学生存储库的文件
    • ARGS[1] -包含数据的文件的名称(students_group_1.csv)
    • ARGS[2] -需要检查的活动/作业的名称(Семинар_1)
为什么不替换脚本 generate_student_folders.jl 类似的功能?

使用脚本的方便之处在于它的内部,[不像функции](https://engee.com/helpcenter/stable/ru/julia/manual/faq.html#могу-ли-я-использовать-using-или-import-внутри-функции),可以使用 usingimport.

也就是说,我们可以调用一个单独的过程。 连接其中的软件包 执行操作 回到我们的主程序。

注意我们已经使用了包 CSV 程序内部 generate_student_folders.jl 但是这个包在我们的脚本中没有连接

In [ ]:
try
    df = CSV.read("students_group_1.csv", DataFrame);
catch e 
    sprint(showerror,e)
end
Out[0]:
"UndefVarError: `CSV` not defined"

调试代码

尽管在脚本中调试代码也是可能的。, .jl 文件比它们有优势。 这就是为什么:

.ngscript 代表 json-文件。

例如,文件 _sqrt_16.ngscript 代表 json-包含的文件

# 文件中关于第一个文本单元格的部分

      "id""ffe36da1",
"cell_type":"标记",
"来源":[
"价值 $\\sqrt{16}$"
      ],
# 关于第一代码单元格的代码的一部分

      "id":"a4b6a26f",
      "cell_type":"代码",
      "来源":[
        "sqrt(16)"
      ],

也就是说,事实上,调试这样的文件并不是一项微不足道的任务。
让我们确定一下。

调试/调试 .ngscript 档案

创建函数 circle_area 在电流 .ngscript-文件。

In [ ]:
"Площадь круга по радиусу"
function circle_area(r)
  π*r^2
end
Out[0]:
circle_area

使用 @functionloc 您可以找出要调用的方法的文件名和字符串。

In [ ]:
@functionloc circle_area(2)
Out[0]:
(nothing, 2)

正如你所看到的,文件名没有被返回,并且单元格的第2行被指示为行(在描述我们的函数"区域陡峭的半径"之后)。

调试/调试 .jl-档案

然而,对于 .jl-文件中没有这样的问题。 和文件中声明的位置 MyModule.jl 功能 area 这是相当肯定的推断:

In [ ]:
@functionloc area(Rectangle(2,3))
Out[0]:
("/user/jl-files/MyModule.jl", 17)
отладка.png

.jl-文件作为应用程序的一部分

开发应用程序使用,例如,[精灵](https://engee.com/helpcenter/stable/ru/feature/genie-engee.html ),有必要在应用程序目录内部创建 .jl 文件,而不是脚本。

所以,应用程序的主文件应该是一个名称为 app.jl.