YStudio Y++

Lua类

Y++ / YStudio 开发文档 · 一点滴

类对象支持库(不是扁平命令)。路径:支持库 → 扩展类库 → Lua类。

类型名必须写完整「Lua类」。声明时自动创建,一般无需再调 创建*。

硬约束

  1. 类型名必须写「Lua类」。官方 Lua 5.4,静态链入 exe(无外部 lua.dll)。
  2. 开放 base / table / string / math / utf8 / coroutine;白名单 require(先 加载模块);无 io / os / package。
  3. 无 Lua→Y++ 回调;宿主通过 置全局 / 置JSON / 置字节集 / 调用 / 执行取回 传参取结果。
  4. 方法调用必须带括号;脚本错误看返回值 / 取错误() / 取栈() / 取行号()。
  5. 长脚本用 R"lua(... )lua"(不是 @"...")。
  6. 置指令上限 / 置超时 防死循环;置只读目录 后脚本可 readfile(仅根下只读)。

快速开始

Lua类 L
L.置JSON("cfg", "{\"n\":3}")
文本 v = L.执行取回("return cfg.n * 2")
文本 t = L.调用("表函数", "[{\"a\":1},2]")  // 嵌套 JSON → Lua table
L.执行取回("return 1,2,3")
文本[] arr = L.取返回数组()

Lua类/创建

创建Lua

  • 签名:Lua类 创建Lua()
  • 说明:显式创建引擎(一般写「Lua类 L」即可)。

Lua类/方法

执行

  • 签名:逻辑 执行(文本 脚本)
  • 说明:执行并丢弃返回值。

执行取回

  • 签名:文本 执行取回(文本 脚本)
  • 说明:执行并取回:标量友好文本,表→JSON,多返回值→JSON 数组。

加载 / 加载模块

  • 逻辑 加载(文本 文件路径) — 读文件并执行
  • 逻辑 加载模块(文本 模块名, 文本 文件路径) — 登记后脚本可 require("模块名")

置全局 / 置JSON / 置字节集 / 取全局 / 取JSON / 取字节集

  • 置全局 — 只写字符串
  • 置JSON — JSON→Lua 值(对象/数组→table)
  • 置字节集 — 字节集→Lua 二进制 string
  • 取全局 — 表自动变 JSON;逻辑→真/假
  • 取JSON — 强制 JSON(字符串带引号)
  • 取字节集 — 全局 string→字节集

调用

  • 文本 调用(文本 函数名, [文本 参数JSON])
  • 第二参为 JSON 数组,可嵌套对象/数组;多返回值打包为 JSON 数组

取返回 / 取返回数组 / 取输出 / 清空输出 / 取错误 / 取栈 / 取行号 / 重置

  • 取返回() — 最近一次取回结果(多返回仍为 JSON 数组文本)
  • 取返回数组() — 多返回拆成 文本[]
  • 取输出() / 清空输出() — 脚本 print 缓冲
  • 取错误() / 取栈() / 取行号() — 失败诊断
  • 重置() — 重建引擎(保留已登记模块、指令上限、超时、只读根)

置指令上限 / 置超时 / 置只读目录

  • 置指令上限(整数 上限) — 0 不限;超限则执行失败
  • 置超时(整数 毫秒) — 0 不限
  • 置只读目录(文本 路径) — 开启脚本 readfile;路径须落在根下;"" 关闭

易错对照

错误 正确
类型写成 Lua 必须「Lua类」
@"..." 长脚本 用 R"lua(... )lua"
未登记就 require 先 加载模块
期望脚本回调 Y++ 不支持
未置只读目录就 readfile 先 置只读目录

相关

JS类 · JSON类 · HTTP类