Skip to content

API Host Extended

Liu.Yandong.Hanks edited this page Aug 26, 2026 · 4 revisions

Extended

用于读取 ScriptDatum span 和检查运行时值标志的宿主回调辅助类。

命名空间:AuroraScript。类型:class。

返回 .NET 宿主 API 参考

概述

Extended 是扩展方法的静态类。span 读取器从位置参数 span 中提取类型化值,无需复制或装箱;Include 测试 ValueKind 标志。

Note

这些辅助方法主要在 ClrDatumDelegate 或其他原始 ScriptDatum 宿主回调中有用。

快速参考

Extended 的最小用法。

Span<ScriptDatum> args = [ScriptDatum.FromNumber(42)];

if (args.TryGetInt32(0, out var value))
{
    Console.WriteLine(value); // 42
}

方法

Include

static bool Include(this ValueKind valueKind, ValueKind flag)

测试值种类是否包含某个标志。

参数

名称 类型 必需 说明
valueKind ValueKind 要检查的值种类。
flag ValueKind 要测试的标志。

返回值

标志已设置时返回 true;否则返回 false

if (datum.Kind.Include(ValueKind.String))
{
    Console.WriteLine(ScriptDatum.ToString(datum));
}

Span 读取器

static bool TryGetNumber(this Span<ScriptDatum> source, int index, out double value)
static bool TryGetInteger(this Span<ScriptDatum> source, int index, out long value)
static bool TryGetInt32(this Span<ScriptDatum> source, int index, out int value)
static bool TryGetStrictNumber(this Span<ScriptDatum> source, int index, out double value)
static bool TryGetString(this Span<ScriptDatum> source, int index, out string value)
static bool TryGetObject(this Span<ScriptDatum> source, int index, out ScriptObject value)
static bool TryGetEnumerator(this Span<ScriptDatum> source, int index, out ScriptEnumerator value)
static bool TryGetFunction(this Span<ScriptDatum> source, int index, out ClosureFunction value)
static bool TryGetBoolean(this Span<ScriptDatum> source, int index, out bool value)
static bool TryGetRef(this Span<ScriptDatum> source, int index, ref ScriptDatum value)

将单个位置参数读取为特定类型。

参数

名称 类型 必需 说明
source Span<ScriptDatum> 传递给宿主回调的参数 span。
index int 要读取的从零开始的参数索引。
value outref 参数 接收读取值。类型取决于读取器。

返回值

参数存在且匹配请求类型时返回 true;否则返回 false

行为

  • TryGetNumber 应用脚本数字强制转换;TryGetStrictNumber 仅接受数字值。
  • TryGetRef 通过 ref 接收目标,因此回调可以读写同一槽。
  • 读取超出 source 末尾时返回 false 而非抛出异常,因此回调可以将缺失参数视为可选。
ClrDatumDelegate add = (
    ScriptContext ctx,
    ScriptObject module,
    Span<ScriptDatum> args,
    ref ScriptDatum result) =>
{
    if (args.TryGetNumber(0, out var left) && args.TryGetNumber(1, out var right))
        result = ScriptDatum.FromNumber(left + right);
};

Clone this wiki locally