Engee 文档

软件脚本管理

另请参见:程序模型控制的应用

这里介绍了所有 engee.script 程序控制方法。有关 engee 方法的介绍,请参阅文章计划管理的公共方法

脚本 "方法

engee.script.edit(path::String)

打开位于编辑器中沿路径的交互式脚本。 path (包括名称和扩展名)。 如果没有这样的文件,则使用指定的路径创建一个空的脚本文件,并在编辑器中打开。 如在 path 的延伸与’不同。ngscript',则函数返回错误 ErrorException("path should end with '.ngscript' extension").

例子

# 打开文件。Engee脚本编辑器中的ngscript脚本
engee.script.edit( "file.ngscript" )
engee.script.run(path::String; isolate::Bool = false)

在指定的路径上运行脚本。 返回脚本中最后一个上层表达式的结果。

参数

  • path::String:脚本的绝对路径。

  • isolate::Bool = false:if等于 true,则脚本在隔离环境中执行。 默认情况下,它等于 false. 与平等 false 脚本在主用户环境(主模块)中执行。 全局或顶层声明的所有变量都在执行后保存。 与平等 true 脚本在临时隔离的环境中执行。 在执行过程中创建的所有变量在脚本完成后都不会保存。

例子

考虑文件 foo.ngscript 使用单个代码单元格:

x = 10
y = try
  push!(a, :foo) # 尝试将:foo添加到现有数组'a`
  5        # 如果一切正常,我们给y赋值5。
catch _
  3        # 如果发生错误,我们为y分配值3。
end
x + y        # 我们返回x和y的总和

在用户环境中执行(isolate = false)将改变变量 xy,并且还将添加 :foo 到阵列 а:

a = Symbol[:bar, :baz] # 原始数组
x = y = 0        # 运行脚本之前的变量
(engee.script.run("foo.ngscript"), x, y, a)
# ⇒ (15, 10, 5, [:bar,:baz,:foo])
# 脚本更改了变量x和y,并且还在数组a中添加了:foo

在隔离环境中执行时(isolate = true)脚本不会影响外部变量,也不会保存更改:

# 原始数组
a = Symbol[:bar, :baz]

# 运行脚本之前的变量
x = y = 0
(engee.script.run("foo.ngscript"; isolate = true), x, y, a)
# ⇒ (13, 0, 0, [:吧,:baz])
# 脚本不影响外部变量—更改未保存。
engee.script.@include(path::String)

将指定脚本的内容插入到调用宏的位置。 相对于 engee.script.run,其中单独执行脚本,一个宏 @include 在调用的地方用词法替换脚本代码。

如果 @include 如果它在代码块内部(例如,在函数内部)使用,那么脚本中未声明为全局的变量将在宏调用所在的词法环境中解释。 例如,这允许在包含的脚本中使用来自外部函数的变量-脚本将将它们视为当前作用域的局部变量。

参数

path::String:脚本的绝对路径。

例子

考虑文件 foo.ngscript 带有代码单元格:

if z > 10
  return z
else
  push!(b, z)   # 将z值添加到b数组
  return maximum(b)
end

此代码不能直接通过 engee.script.run,变量尚未定义 zb. 但随着 @include 它可以嵌入到已经定义了这些变量的函数中。:

function foo(z, b)

# 脚本中的'z'和'b'将引用此函数的参数。
engee.script.@include "foo.ngscript"
end

function bar(z)
# 原始数组
b = Int[3, 11]
(foo = foo(z, b), b = b)
end

# 脚本嵌入在'foo'函数中,变量`z`和'b'会自动替换。
(bar(5), bar(15))
# ⇒((foo=11,b= [3, 11, 5]), (foo=15,b=[3,11]))

在宏代码中 @include 将代码替换为 foo.ngscript 直接进入功能体 foo 因此,脚本中的变量会自动引用函数作用域中的值。