target::method() 映射到 Java 侧实现,用于为特定宿主类型增加上下文能力(文件、集合、游戏对象等)。
核心代码分布在 FluxonRuntime、ExtensionBuilder、Environment。
快速上手(Builder)
function:同步扩展。async:异步扩展(等价于registerAsyncExtensionFunction)。primarySync:主线程扩展。
ExtensionBuilder 只是语法糖,底层仍调用 FluxonRuntime 的注册方法。
直接注册
| 方法 | 说明 |
|---|---|
registerExtensionFunction(type, name, paramCount, callable) | 同步扩展。paramCount 支持 int 或 List<Integer>;命名空间可为 null。 |
registerExtensionFunction(type, namespace, name, List<Integer>, callable) | 指定命名空间,需脚本侧 import。 |
registerAsyncExtensionFunction(...) | 异步扩展。 |
registerSyncExtensionFunction(...) | 主线程扩展。 |
fs:io + readText -> fs:io::readText()。
查找与匹配流程
- 解释器确定
target的Class<?>。 Environment#getExtensionFunction优先在烘焙的systemExtensionFunctions二维数组中按名称匹配。- 若未命中,回退到
extensionFunctions(名称 ->Map<Class<?>, Function>)。 - 匹配顺序为精确类型,再尝试
isAssignableFrom,确保子类可复用父类扩展。
实战提示
- 复杂类型示例可参考
core/src/main/java/org/tabooproject/fluxon/runtime/function/extension(Path、Collection等)。 - 想支持索引访问 (
obj[index]),需实现IndexAccessor(详见运行时章节)。 - 调试:
Environment#getRootExtensionFunctions()查看当前映射。 - 若调用失败,检查是否遗漏
import或命名空间不一致。 dumpFluxonCatalog可确认导出签名。