"NodeJS" (外部计算系统)

更多信息

  • 支持 Node.js 版本 7.10.1 以及更高版本.
  • Node.js 是一个内置于 Chrome 的 V8 JavaScript 引擎的 JavaScript 运行时.
  • 要配置 Node.js 以便用于 Wolfram 语言中,请遵循为 ExternalEvaluate 配置 NodeJS 工作流程的说明.

ExternalEvaluate 用法

  • ExternalEvaluate["NodeJS",code] 在 Node.js REPL 中执行代码字符串并以 Wolfram 语言表达式的方式返回结果.
  • ExternalEvaluate["NodeJS""String",code] 在 Node.js REPL 中执行代码字符串,不诠释结果.
  • ExternalEvaluate["NodeJS""type",code]"type" 可取的设置包括:
  • "Expression"尝试转换为 Wolfram 语言表达式
    "String"给出外部运算器输出的原始字符串
    "ExternalObject"ExternalObject 的形式返回结果

数据类型

支持的外部运算

范例

打开所有单元关闭所有单元

基本范例  (2)

使用 File 包装器来执行文件中的代码:

使用 CloudDeploy 部署代码,然后直接从 CloudObject 中运行代码:

使用一个 URL 包装器来直接运行在线托管的代码:

范围  (28)

开始一个会话:

在 NodeJS 中计算一个布尔语句并返回之:

连接 NodeJS 中的字符串并返回结果:

使用 NodeJS 创建 ExternalFunction

调用该函数:

关闭会话:

会话选项  (9)

"ReturnType"  (3)

对于 NodeJS,默认返回类型为 "Expression"

数字、字符串、列表和关联会自动导入 "Expression" 返回类型:

使用 JSON,返回类型为 "String" 会返回字符串:

"Version"  (1)

可以使用 "Version" 来确保只使用运算器的一个特定版本:

也可以指定一个次要版本或补丁版本:

"Evaluator"  (1)

使用指定的 "Evaluator" 运算代码:

"SessionProlog"  (1)

使用 "SessionProlog" 可在会话开始时执行一个副作用:

"SessionEpilog"  (1)

使用 "SessionEpilog" 可在会话结束时执行一个副作用:

"Prolog"  (1)

使用 "Prolog" 可在每次评估前执行一个副作用:

"Epilog"  (1)

使用 "Epilog" 可在每次评估后执行一个副作用:

命令选项  (10)

"Command"  (4)

当提供一个字符串时,该命令将被直接执行:

上面的内容相当于用这种形式写命令:

使用 File 包装器来运行文件中的代码:

上面的内容相当于用这种形式写命令:

使用 URL 包装器来直接运行在线托管的代码:

上面的内容相当于用这种形式写命令:

把代码放在 CloudObject 中:

直接从云端进行运算:

上面的内容相当于用这种形式写命令:

"ReturnType"  (1)

在命令中指定一个 "ReturnType" 则将覆盖会话的 "ReturnType"

"Arguments"  (2)

使用 "Arguments" 调用带有参数的命令:

对于单个参数,不需要使用列表:

如果你需要传递列表作为第一个参数,则该列表需要明确地包装在一个额外的列表中:

你可以在 "Command" 中命名一个函数,然后用 "Arguments" 直接调用它:

同样的结果可以通过使用 Rule 来归档:

另一种方法是定义一个 ExternalFunction

"Constants"  (1)

使用 "Constants" 在命令运行前设置全局变量:

"TemplateArguments"  (2)

当运行命令时,你可以内联一个 TemplateExpression

你可以使用 "TemplateArguments"TemplateSlot 进行填充:

如果你需要传递列表作为第一个参数,请将该列表包装在一个额外的列表中:

你可以为模板槽命名,并使用 Association 来向模板传递命名的参数:

外部运算  (8)

"Eval"  (1)

运行表示 NodeJS 中任意代码运算的 ExternalOperation

用第二个参数传递运算内容:

"Call"  (3)

定义一个在 NodeJS 中创建函数的 ExternalOperation

通过运行 ExternalOperation "Call" 调用函数:

ExternalEvaluate 执行运算:

"Call" 运算的任何参数都可以是 ExternalOperation

还可以通过执行以下操作直接在 ExternalEvaluate 中传递参数:

结果相当于运行以下 NodeJS 代码:

创建 NodeJS 函数 max 的 ExternalFunction

通过运行 "Call" 调用函数:

通过执行以下操作可以获得相同的结果:

创建 NodeJS 函数的 ExternalFunction

通过运行 "Call" 调用函数:

通过执行以下操作可以获得相同的结果:

或使用 ExternalObject 子值:

关闭会话:

"GetAttribute"  (2)

启动 NodeJS 会话来处理日期:

返回一个 "Math" 对象的 ExternalObject

通过使用 "GetAttribute" 提取函数:

调用函数:

结果相当于运行以下 NodeJS 代码:

删除会话:

创建表示 "Math" 对象的 ExternalObject

ExternalOperation 获取函数:

对于大多数运算器,"GetAttribute" 是默认运算,可以省略 ExternalOperation

可通过链接 "Call" 运算直接调用该函数:

还可以通过执行以下操作对函数调用进行存档:

删除会话:

"SetAttribute"  (1)

启动 NodeJS 会话来处理一个对象:

在 NodeJS 中创建一个对象;创建单个对象时,必须用括号括起来:

将属性 "b" 设为 6:

查看属性是否被设为 6:

结果相当于运行以下 NodeJS 代码:

删除会话:

"Cast"  (1)

创建表示数组的 ExternalObject

"Expression" 以 Wolfram 语言表达式的形式返回对象:

也可以在 ExternalObject 子值中运行 Cast 运算:

符号 Expression 是完成相同运算的更简便的方式:

用字符串返回对象:

符号 String 是完成相同运算的更简便的方式:

ExternalObject 返回对象:

符号 ExternalObject 是完成相同运算的更简便的方式:

ExternalEvaluate 中使用 "ReturnType" 可以得到同样的结果:

删除会话:

应用  (2)

在 NodeJS 中定义 Range 函数:

使用该函数:

使用 prettier 重新格式化一个 JavaScript 代码字符串:

可能存在的问题  (1)

如果运行直接返回对象的命令,会返回一个语法错误:

想要返回一个对象,则需要添加括号: