用 Codex 或 Claude 帮你安装 复制这段 Prompt,粘贴到 Codex、Claude 或其他助手里,让它检查 Skill 页面并帮你完成安装。
直接命令不会经过审查 Prompt;运行前请先检查来源。
npx skills add https://github.com/AxGord/claude-workflow --skill lang-as3命令会保持在同一行。复制前请横向滚动并检查完整内容。
想先保存到本地?可下载 SkillsMP 当前能够提供的文件。
Debugging meta-patterns — what to do when fixes don't stick
Game dev precision and physics gotchas
Claude Code configuration gotchas — permission rule syntax and evaluation order, settings hierarchy, plugin install scopes, hook behavior
基于 SOC 职业分类
正在显示 SKILL.md
| name | lang-as3 |
| description | AS3 / AIR 51 language gotchas — optional chaining bugs, immutability limits, event dispatch semantics |
?.obj?.prop — works, returns undefined if nullobj?.method() — BROKEN. Calls null() instead of short-circuiting. Use if (obj != null) obj.method()?. call to an explicit null-check, leave a marker comment at the site (e.g. // ?. AIR bugfix — don't restore optional chaining) so later edits don't reintroduce the bugfinal only works on methods and classes, NOT on fields — final var is a compile errorconst for never-reassigned fields instead: private const _items:Array = []; — assign at the declaration, or once in the constructorconst is shallow — the binding is fixed, the object's contents stay mutableremoveEventListener does not take effect during an in-flight dispatchAdobe docs (EventDispatcher): "If an event listener is removed from a node while an event is being processed on the node, it is still triggered by the current actions." The listener list is snapshotted when the dispatch starts.
Consequence: a handler can run after its own cleanup already nulled the fields it reads → TypeError #1009. Classic shape — many objects listen to stage ENTER_FRAME; handler A synchronously disposes object B; B's handler is still in the snapshot and fires with _field == null.
Removing a listener is therefore not a sufficient guard. Any handler on a shared dispatcher must also null-check the state it touches, or check a disposed flag first.
as operator with primitive typescontext.call(...) as int works only if the native extension returns FRENewObjectFromInt32 (value arrives as a boxed int). If the C++ side returns FRENewObjectFromDouble, as int silently returns null, which coerces to 0.int(context.call(...)) — works regardless of whether the native side returns int, uint, Number, or double.as is designed for reference types. With primitives (int, uint, Number, Boolean), behavior depends on the exact runtime type of the boxed value — fragile and non-obvious.