콘텐츠로 이동

심볼 색인

공개 표면의 심볼을 이름으로 찾는 자리입니다. 각 행의 링크가 그 심볼을 자세히 설명하는 페이지를 가리킵니다 — 같은 심볼이 두 페이지에 나오면(예: 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)을 달아 알립니다.

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

자식이 들어갈 자리를 잡고, 수동 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

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

프로퍼티 묶음을 불변 값으로 들고 다니며 합성·오버라이드·다운캐스트하는 심볼들입니다.

심볼 페이지
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

인스턴스에 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

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권 — 공변 마커가 다룹니다.