심볼 색인
공개 표면의 심볼을 이름으로 찾는 자리입니다. 각 행의 링크가 그 심볼을 자세히 설명하는 페이지를 가리킵니다 — 같은 심볼이 두 페이지에 나오면(예: Slot의 센티널) 둘 다 적었습니다.
읽는 순서가 필요하면 색인이 아니라 트랙을 따라가세요: 시작하기 → 실전 레시피 → 여기.
표기 규약은 이렇습니다. 모듈 인스턴스는 q이고, 백엔드 표면은 q.Elem "Frame"처럼 클래스 이름을 먼저 받는 꼴로 씁니다. q.X는 모듈 표면의 값, x:Method()는 그 값의 메소드, x.Field는 필드입니다. <<T>>는 명시 타입 인자입니다.
관측과 계약
섹션 제목: “관측과 계약”정의되지 않은 동작이나 콜백이 던진 뒤의 상태를 다루는 문장은 약속이 아니라 관측입니다. 그런 문장에는 “관측 — 계약 아님”을 붙여 두었습니다 — 지금의 동작을 기록한 것이고, 결과를 단정형으로 적었어도 다음 버전에서 예고 없이 바뀔 수 있으니 기대어 코드를 짜지 마세요. 던진 뒤에 대해 quad가 약속하는 것은 둘뿐입니다. 약속하는 회복은 하나 — 던진 Observer 콜백은 다음 변경에 다시 돕니다. 약속하는 비회복도 하나 — fn이 던진 Effect는 죽어서 다시 돌지 않습니다. 둘이 왜 다른지는 Quadnomicon 12 — 파동을 받는 두 방식에서 풀어 봅니다.
안정성
섹션 제목: “안정성”quad는 SemVer를 따릅니다 — 호환이 깨지는 변경은 메이저 버전에만 실립니다. 바꿀 때는 새 표면을 먼저 내고 옛 것을 Deprecated로 두었다가 다음 메이저에서 지웁니다. 어떤 실수가 어느 에러 번호로 보고되는지도 이 약속 안이고, 메시지 문구는 밖입니다.
아래 unstable 표면은 이 약속 밖입니다. 마이너 버전에서도 바뀔 수 있고, 바뀌면 CHANGELOG의 Changed에 (unstable)을 달아 알립니다.
Tween의 콜백 셋 —Started·Completed·Cancelled가 언제·몇 번·어떤 순서로 불리는지tween:Wrapped(wrap)와tween:Mapped(fn)의 둘째 인자wrapq.ForClasses<<Map>>()와 타입 함수가 클래스 타입에서 계산하는 표면의 세부 — 런타임 동작이 아니라 타입 쪽 이야기입니다
에러 코드
섹션 제목: “에러 코드”quad가 던지는 모든 에러는 QuadNNNN으로 시작합니다 — 번호로 찾는 설명은 에러 코드 색인.
모듈과 설치
섹션 제목: “모듈과 설치”quad 모듈 인스턴스를 만들고, 초기화 함수·플러그인·백엔드 프로바이더를 붙이는 심볼들입니다.
| 심볼 | 페이지 |
|---|---|
q.NewModule()(3.3까지 q.New()) |
core/01 — Quad 모듈 |
q.Raw |
core/01 |
q:RunInit(initFn) |
core/01 |
q:AddPlugin(pluginFn) |
core/01 |
q:UseProvider(providerFn) |
core/01 · roblox/01 — 설치 |
q.Version |
core/01 |
q:GetOrCreate(key, build) |
core/01 |
q:AssertProvider(name, versionPattern) |
core/01 |
q.debug |
core/01 |
q.errorNamespace |
core/01 · extend/01 |
q.Relate() |
core/01 |
q.moduleIdentity |
core/01 |
QuadRoblox |
roblox/01 — 설치 |
RobloxExtension |
roblox/01 |
반응형 코어
섹션 제목: “반응형 코어”값이 흐르는 그래프를 만드는 심볼들 — 값을 쓰는 원천, 거기서 파생되는 노드, 이름 붙은 원천 묶음.
| 심볼 | 페이지 |
|---|---|
q.Source(value) |
core/02 — Source |
source:Set(v) |
core/02 |
source:SetIfChanged(v) |
core/02 |
source:SetAndDispose(v) |
core/02 |
source:Emit() |
core/02 |
source.Revision |
core/02 |
state:Get() |
core/03 — State |
state:Compute(fn, ...deps) |
core/03 |
state:Depend(...) |
core/03 |
state:Apply(factory) |
core/03 · sugar/06 |
state:Observer(fn) |
core/05 — Observer·Effect · core/03 |
state:Gate(setup) |
core/03 |
q.Store(defaults) |
core/04 — Store |
store.key(선언된 필드) |
core/04 |
store:Of<<U>>(name) |
core/04 |
store:Names() |
core/04 |
구독 핸들
섹션 제목: “구독 핸들”값이 바뀔 때 부를 콜백을 그래프의 잎에 다는 핸들 둘과, 그 구독을 켜고 끄는 메소드들입니다.
| 심볼 | 페이지 |
|---|---|
q.Effect(fn, ...deps) |
core/05 — Observer·Effect |
observer.Subscribed |
core/05 |
observer:Subscribe() |
core/05 |
observer:WeakSubscribe() |
core/05 |
observer:Unsubscribe() |
core/05 |
observer:WeakUnsubscribe() |
core/05 |
effect:Rerun() |
core/05 |
effect:Subscribe() |
core/05 |
effect:WeakSubscribe() |
core/05 |
effect:Unsubscribe() |
core/05 |
effect:WeakUnsubscribe() |
core/05 |
전파 게이트
섹션 제목: “전파 게이트”값은 항상 최신으로 두고 아래로의 통지만 묶었다가 한 번에 내보내는 심볼들입니다.
| 심볼 | 페이지 |
|---|---|
q.Blocker() |
sugar/06 — Blocker |
blocker.Blocking |
sugar/06 |
blocker:On() |
sugar/06 |
blocker:Off() |
sugar/06 |
blocker:OffWithoutEmit() |
sugar/06 |
blocker:Policy(emit) |
sugar/06 |
Slot
섹션 제목: “Slot”자식이 들어갈 자리를 잡고, 수동 CRUD나 데이터 기반 목록으로 그 안을 채우는 심볼들입니다.
| 심볼 | 페이지 |
|---|---|
q.Slot<<T>>(initial?) |
core/06 — Slot |
slot.Length |
core/06 |
slot.Offset |
core/06 |
slot:Add(element, index?) |
core/06 |
slot:Remove(index) |
core/06 |
slot:Replace(index, newElement) |
core/06 |
slot:Extract(index, newElement?) |
core/06 |
slot:ExtractAll() |
core/06 |
slot:Splice(index, removeCount, ...) |
core/06 |
slot:Clear() |
core/06 |
slot:Move(oldIndex, newIndex) |
core/06 |
slot:Swap(indexA, indexB) |
core/06 |
slot:Get(index) |
core/06 |
slot:IndexOf(element) |
core/06 |
slot:WhenIdle(fn) |
core/06 |
slot:List(data, updateFn, keyFn?, opts?) |
core/06 |
slot:Single(state, updateFn?, opts?) |
core/06 |
Ref
섹션 제목: “Ref”quad가 만든 인스턴스를 손에 쥐는 세 종류의 참조와, 채워질 때를 기다리거나 받아 보는 방법들입니다.
| 심볼 | 페이지 |
|---|---|
q.Ref<<T>>(default) |
core/07 — Ref |
q.PreRef<<T>>(default) |
core/07 |
q.PostRef<<T>>(default) |
core/07 |
ref.Value |
core/07 |
ref.Revision |
core/07 |
ref.Callbacks |
core/07 |
ref.WeakCallbacks |
core/07 |
ref:Set(value) |
core/07 |
ref:Callback(fn) |
core/07 |
ref:WeakCallback(fn) |
core/07 |
ref:Uncallback(fn) |
core/07 |
ref:Wait(thread?) |
core/07 |
ref:Unwrap() |
core/07 |
Modifier
섹션 제목: “Modifier”프로퍼티 묶음을 불변 값으로 들고 다니며 합성·오버라이드·다운캐스트하는 심볼들입니다.
| 심볼 | 페이지 |
|---|---|
q.Raw.Modifier(...)(3.3까지 q.Modifier(...)) |
core/08 — Modifier |
mod:<Field>(value) |
core/08 · roblox/03 |
mod:Peek<<T>>(key) |
core/08 |
mod:Apply(factory) |
core/08 |
mod:Overridden(...) |
core/08 |
mod:As(name) |
core/08 |
mod:As<Class>() |
core/08 · roblox/03 |
q.Raw.Modifier.Overridden(...) |
core/08 |
q.Raw.Modifier.TypedFactory<<T>>(name) |
core/08 |
q.Raw.Modifier.DefineSubtype(parent, subtype) |
core/08 |
q.Modifier "Class" (...)(3.3까지 D.Modifier.<Class>(...)) |
roblox/03 — Modifier와 Spread |
mod:As() / mod:As<<T>>() |
roblox/03 · core/08 |
Modifier<C> / ModifierInto<C>(3.3까지 <Class>Modifier / Into<Class>) |
roblox/03 |
q.Spread "Class" (props) / spread:Append(other) |
roblox/03 |
Spread<C> / SpreadInto<C> |
roblox/03 |
q.Raw.Spread(t) |
core/01 |
Tag / Attr
섹션 제목: “Tag / Attr”인스턴스에 CollectionService 태그와 어트리뷰트를 선언적으로 붙이는, 숫자 키 자리의 값 객체 둘입니다.
| 심볼 | 페이지 |
|---|---|
q.Tag(...names) |
core/09 — Tag·Attr |
tag:Added(names) |
core/09 |
tag:Removed(names) |
core/09 |
tag:Contains(...names) |
core/09 |
for name in tag |
core/09 |
tag:Apply(factory) |
core/09 |
q.Tag.Merged(...tags) |
core/09 |
q.Attr(...) |
core/09 |
attr:NameMap() |
core/09 |
q.Attr.Merged(...) |
core/09 |
q.Attr.Overridden(...) |
core/09 |
q.AttrKey(name) |
core/09 |
q.StringAttr(name, value) |
core/09 |
q.NumberAttr(name, value) |
core/09 |
q.BooleanAttr(name, value) |
core/09 |
센티널과 생명주기
섹션 제목: “센티널과 생명주기”자리를 비우거나 원소를 떼어 두는 특수 값들과, 값의 수명을 인스턴스에 묶는 백엔드 표면입니다.
| 심볼 | 페이지 |
|---|---|
q.None |
core/10 — 생명주기와 센티널 |
q.Detach |
core/10 · core/06 |
q.KeyGone |
core/10 · core/06 |
q.Void |
core/10 |
q.dispose(value) |
core/10 · core/06 |
q.MapperRoot |
core/10 · roblox/04 |
q.Raw.Mapper(className)(3.3까지 q.newMapperClass) |
core/01 |
q.Backend.bindLifetime(inst, value) |
core/10 · extend/01 |
q.Backend.unbindLifetime(value) |
core/10 · extend/01 |
q.Backend.canBound(value) |
core/10 · extend/01 |
q.Backend.canExecute(value) |
core/10 · extend/01 |
q.Backend.isClaimed(inst) |
core/10 · extend/01 |
브랜드 술어
섹션 제목: “브랜드 술어”받은 값이 quad의 어떤 종류인지 되묻는 술어 묶음입니다.
q.isEpoch · q.isSource · q.isState · q.isStore · q.isObserver · q.isEffect · q.isBlocker · q.isContext · q.isProvider · q.isModifier · q.isRef · q.isPreRef · q.isPostRef · q.isMapperDescriptor · q.isSlot · q.isTag · q.isAttr · q.isAttrKey — 전부 core/11 — 브랜드 술어의 한 표에 있습니다.
| 심볼 | 페이지 |
|---|---|
q.Backend.isInst(value) |
core/11 · extend/01 |
q.Backend.provider |
extend/01 · core/01 |
q.isTween(x) |
core/11 · roblox/06 |
코어 위에 순수하게 얹힌 것들 — 값 가방, 연산 콤비네이터, 시간 게이트, 생명주기 훅, 에러 격리.
| 심볼 | 페이지 |
|---|---|
q.Context() |
sugar/01 — Context |
q.Context.Provider(name?) |
sugar/01 |
ctx:Set(provider, value) |
sugar/01 |
ctx:Get(provider) |
sugar/01 |
ctx:Peek(provider) |
sugar/01 |
provider.Name |
sugar/01 |
q.Operator.Not |
sugar/02 — Operator |
q.Operator.Sum(...) |
sugar/02 |
q.Operator.Product(...) |
sugar/02 |
q.Operator.Min(...) |
sugar/02 |
q.Operator.Max(...) |
sugar/02 |
q.Operator.Clamp(lo, hi) |
sugar/02 |
q.Operator.Band(...) |
sugar/02 |
q.Operator.Bor(...) |
sugar/02 |
q.Operator.Bxor(...) |
sugar/02 |
q.Operator.Bnot |
sugar/02 |
q.Operator.Shl(n) |
sugar/02 |
q.Operator.Shr(n) |
sugar/02 |
q.Operator.Alternative(default) |
sugar/02 |
q.Operator.Indexed<<V>>(key) |
sugar/02 |
q.Debounce{...} |
sugar/03 — Debounce·Throttle |
q.Throttle{...} |
sugar/03 |
handle:Flush() / handle:Cancel() |
sugar/03 |
factory:Flush() / factory:Cancel()(TimedGate 브로드캐스트) |
sugar/03 |
q.OnCreated<<I>>(fn) |
sugar/04 — 생명주기 훅 |
q.OnRendered<<I>>(fn) |
sugar/04 |
q.OnDestroyed(fn) |
sugar/04 |
q.Fallback(base, onError) |
sugar/05 — Fallback·Traceback |
q.Traceback(base, onError) |
sugar/05 |
Roblox 백엔드
섹션 제목: “Roblox 백엔드”quad-roblox가 얹는 표면 — 인스턴스 선언, 이미 있는 트리의 Claim, 프로퍼티 감시, 트윈.
| 심볼 | 페이지 |
|---|---|
q.Elem "Class" (props)(3.3까지 q.Declaration — D.<Class>(props)·D.New) |
roblox/02 — Elem |
숏핸드 키 UICorner / UIPadding / UIPaddingOffset / UIScale |
roblox/02 |
q.ForClasses<<Map>>() |
roblox/02 |
Props<C> / PropsHashPart<C> / PropsArrayItem<C> / MapperProps<C> / ElemCtor<C> / PropertyMap<C> |
roblox/02 |
Modifier<C> / ModifierInto<C> / Spread<C> / SpreadInto<C> / ModifierField<T> / ModifierFieldOut<T> |
roblox/03 |
OnChangeDescriptor<K> / OnEventDescriptor<K> |
roblox/05 |
q.Claim(inst, descriptor) |
roblox/04 — Claim·Mapper |
q.Mapper "Class" (key)(props)(3.3까지 D.Mapper.<Class>) |
roblox/04 |
q.MapperRoot(3.3까지 D.Mapper.Root도) |
roblox/04 |
q.OnChange "Class" "Name" (fn) |
roblox/05 — OnChange·OnEvent·Out |
q.OnEvent "Class" "Name" (fn) |
roblox/05 |
q.Out "Class" "Name" (src) |
roblox/05 |
q.Tween(opts) |
roblox/06 — Tween·Animate |
tween:Mapped(fn) |
roblox/06 |
q.Animate(info) |
roblox/06 |
확장 계약
섹션 제목: “확장 계약”자기 백엔드나 핸들러를 직접 붙일 때 쓰는 계약 — 주입 op, 핸들러 레코드, 디스패치와 부기 표면.
| 심볼 | 페이지 |
|---|---|
주입 슬롯 전체(holdLifetime/releaseLifetime/isHeld/isHeldBy, native*, onDestroying, nativeClaim, isClaimed, nativeFindChild, addTag, removeTag, setAttr, setTimeout, clearTimeout) |
extend/01 — 백엔드 프로바이더 규약 |
Brand()(quad_types 런타임 값) · brand:Register(v) · brand:Is(v) |
extend/01 §3.1 |
Handler 레코드(isHandlable/priority/process/name/keyType/debugOnly) |
extend/02 — 디스패치 핸들러 계약 |
retractor (nextValue, retracting) |
extend/02 |
q.Dispatch.HANDLER_PRIORITY_HIGH / _NORMAL / _LOW / _FALLBACK |
extend/02 |
q.Dispatch.addHandler(handler) |
extend/02 |
q.Dispatch.listHandlers() |
extend/02 |
q.Dispatch.getHandler(inst, key, value) |
extend/02 |
q.Dispatch.process(inst, key, value, index) |
extend/02 |
q.Dispatch.retractFrom(inst, key, index) |
extend/02 |
q.Dispatch.drive(inst, flattened) |
extend/02 |
q.Bookkeeping.setLength(ownerKey, i, len, anchor?, element?) |
extend/02 |
q.Bookkeeping.setOffsetSource(ownerKey, i, source) |
extend/02 |
q.Bookkeeping.setEmpty(ownerKey, i, anchor?) |
extend/02 |
q.Bookkeeping.getOffsetAt(ownerKey, at) |
extend/02 |
q.Bookkeeping.getBookkeeping(ownerKey) |
extend/02 |
q.Bookkeeping.claimOwnerAt(element, inst, k) |
extend/02 |
q.Bookkeeping.releaseOwner(element, ownerKey) |
extend/02 |
타입 계약의 정본은 quad-types/src/init.luau 한 파일입니다 — State<T>/Source<T>/Slot<T>/Ref<T>/Store<T>/Handler/Dispatch 같은 값 타입, 입력 자리용 마커(StateMarker<T>/SlotMarker<T>), 출력 자리의 ModifierFieldOut<T>, 센티널 타입(None/Detach/KeyGone/MapperRoot)이 전부 거기 선언돼 있습니다.
예외는 백엔드가 소유한 타입입니다. Tween<T>/TweenData<T>/TweenOptions<T>/TweenOverride/TweenConstructor/AnimateInfo/AnimateFn과 백엔드 확장 모양 RobloxExtension은 quad-roblox/src/types.luau(와 quad-roblox/src/init.luau)가 정본이고, 클래스를 인자로 받는 표면 타입(Props<C>/Modifier<C>/ModifierInto<C>/Spread<C>/OnChangeDescriptor<K> 등)은 타입 함수 모듈 quad-roblox/src/Surface/init.luau가 정본입니다 — 엔진 지식이 들어간 타입은 코어가 아니라 그 백엔드에 삽니다. 각 타입이 왜 그 모양인지는 Quadnomicon 4권 — 공변 마커가 다룹니다.
답변함: 0 / 0 (0%)