에러 코드 — 반응형 코어
각 절은 ### QuadNNNN — 메시지 원문(자리표시자는 {…}), 언제 나는가, 어떻게 고치는가. 번호로 찾으려면 색인.
Quad0017
섹션 제목: “Quad0017”Blocker: Policy emit must be a function (got {typeof(emit)}) — quad-base/src/Blocker.luau
- 언제:
blocker:Policy(emit)을 직접 부를 때emit이 함수가 아닌 경우.state:Apply(blocker)를 쓰면 언제나 함수를 넘기므로 그 경로에서는 나지 않습니다. - 고치려면: 게이트의
setup이 넘겨준emit함수를 그대로 넘기세요. - 참고:
blocker:Policy(emit)
Quad0018
섹션 제목: “Quad0018”Blocker: Apply target must be a State (got {typeof(state)}) — quad-base/src/Blocker.luau
{self._name}: Apply target must be a State (got {typeof(state)}) — quad-base/src/Debounce.luau
Operator.{name}: Apply target must be a State (got {typeof(self)}) — quad-base/src/Operator.luau
Animate: Apply target must be a State (got {…}) - put the Animate on the State that feeds the field: state:Apply(q.Animate{ ... }) — quad-roblox/src/Animate.luau
- 언제:
blocker:__apply(x)를 직접 불러x에State가 아닌 값을 넘겼을 때.state:Apply(blocker)는 언제나 그State자신을 넘기므로 그 경로에서는 나지 않습니다. - 언제:
factory:__apply(x)를 직접 불러x에State가 아닌 값을 넘겼을 때(factory는Debounce{...}/Throttle{...}가 돌려준 값).state:Apply(factory)는 언제나 그State자신을 넘기므로 그 경로에서는 나지 않습니다. - 언제: Operator 콤비네이터가
State가 아닌 대상에 붙을 때 —q.Tag(...):Apply(q.Operator.Not)나modifier:Apply(q.Operator.Bnot)처럼Tag/Modifier의:Apply에 넘기거나,q.Operator.Not(5)처럼 콤비네이터(또는q.Operator.Sum(1)이 돌려준 함수)를 직접 불러 State가 아닌 값을 넘긴 경우입니다.state:Apply(...)로 붙이면 대상은 언제나 그State라 나지 않습니다. - 언제:
q.Animate{ … }가 돌려준 팩토리를State가 아닌 것에 붙였을 때 —mod:Apply(q.Animate{…})·tag:Apply(q.Animate{…})·Modifier setter의 변환 함수 자리(mod:BackgroundTransparency(q.Animate{…})— 그 필드가 비었거나 평범한 값일 때; 필드가 이미 State면 거부되지 않고 State 안의 State가 되는 정의되지 않은 동작). 괄호 안은Modifier·Tag나 받은 값(setter 자리면 필드의 옛 값)의 타입입니다. - 고치려면:
State에state:Apply(...)로 붙이세요 —__apply나 콤비네이터를 직접 부르지 말고,Modifier·Tag의:Apply로 넘기지도 마세요. Modifier 필드를 애니메이션하려면 그 필드에 흘리는State쪽에 붙입니다:mod:BackgroundTransparency(alpha:Apply(q.Animate{ Time = 0.2 })). setter 변환 함수 자리에서 난 경우 blame 줄은 여러분의 줄이 아니라Animate.luau를 가리킬 수 있습니다(그 자리는 태그 없는 클로저를 거칩니다) — 스택 트레이스에서 여러분의 setter 호출을 찾으세요. - 참고:
state:Apply(blocker), Debounce·Throttle 공통 계약, Operator 공통 계약,q.Animate(info)
Quad0035
섹션 제목: “Quad0035”Context.Provider: name must be a string (got {typeof(name)}) — quad-base/src/Context.luau
- 언제:
q.Context.Provider(name?)에 준name이 문자열이 아닐 때(생략은 허용됩니다). - 고치려면: 문자열이거나 생략(
nil)으로 두세요. - 참고:
q.Context.Provider(name?)
Quad0036
섹션 제목: “Quad0036”Context:{fnName}: key must be a Provider from Context.Provider() (got {typeof(provider)}) — quad-base/src/Context.luau
- 언제:
ctx:Set/ctx:Get/ctx:Peek의provider자리에q.Context.Provider()로 만든 값이 아닌 것을 넘겼을 때.{fnName}은 실제로 부른 메소드 이름입니다. - 고치려면:
q.Context.Provider()로 만든 키를 넘기세요. - 참고:
ctx:Set(provider, value)
Quad0037
섹션 제목: “Quad0037”Context:Set: value for {tostring(provider)} must not be nil (absence is "not set") — quad-base/src/Context.luau
- 언제:
ctx:Set(provider, value)의value로nil을 넘겼을 때 — 부재는 애초에:Set을 하지 않는 것으로 표현합니다. - 고치려면: 지우려는 의도라면
:Set을 아예 부르지 마세요 —nil대신 실제 값을 넘기세요. 이미:Set한 값을 되돌리는 것은 지원하지 않습니다(값이 그대로 남음) — 필요한 키만 다시:Set한 새q.Context()를 만드세요. - 참고:
ctx:Set(provider, value)
Quad0038
섹션 제목: “Quad0038”Context:Get: no value for {tostring(provider)} - the creator of this Context did not :Set it (use :Peek to test) — quad-base/src/Context.luau
- 언제:
ctx:Get(provider)를 불렀는데 그Provider에 아직 아무도:Set하지 않았을 때. - 고치려면: 먼저
:Set을 부르거나, 없을 수도 있는 값이면:Get대신ctx:Peek(provider)를 쓰세요. - 참고:
ctx:Get(provider)
Quad0039
섹션 제목: “Quad0039”{name}: {field} must be a non-negative number less than math.huge (got {if type(v) == "number" then tostring(v) else typeof(v)}) — quad-base/src/Debounce.luau
- 언제:
Time(또는MaxTime)에 바인딩한State가 읽히는 시점에 내놓은 값이 숫자가 아니거나 음수/NaN/math.huge일 때. 받은 값이 숫자면 꼬리에 그 값(got -1·got inf)이, 아니면 타입이 실립니다. 생성 시점이 아니라 읽는 시점에 검사합니다 —MaxTime과 신호가 여는 창의Time은 그:Set줄에서,Flush뒤 다시 여는 창은Flush줄에서, 창 끝 통과 뒤 다시 여는 창은 타이머 콜백 안에서 던집니다(던진 뒤의 게이트 상태는 Debounce/Throttle의 옵션 게이트 문단 — 관측, 계약 아님). - 고치려면: 그
State가 항상 0 이상의 유한한 숫자를 내놓게 하세요. - 참고:
q.Debounce{...}
Quad0040
섹션 제목: “Quad0040”{name}: {field} is required (a number of seconds or a State<number>) — quad-base/src/Debounce.luau
- 언제:
Debounce{...}/Throttle{...}에 필수 옵션인Time을 아예 안 줬을 때. - 고치려면:
Time에 초 단위 숫자나State<number>를 넘기세요. - 참고:
q.Debounce{...}
Quad0041
섹션 제목: “Quad0041”{name}: {field} must be a non-negative number less than math.huge, or a State<number> (got {if type(t) == "number" then tostring(t) else typeof(t)}) — quad-base/src/Debounce.luau
- 언제: 옵션 생성 시점에
Time/MaxTime이State도 숫자도 아니거나, 숫자인데 음수/NaN/math.huge일 때(무한 창은Flush없이는 영원히 보류하므로 거부합니다). 받은 값이 숫자면 꼬리에 그 값이 실립니다. - 고치려면: 0 이상의 유한한 숫자나
State<number>를 넘기세요. - 참고:
q.Debounce{...}
Quad0042
섹션 제목: “Quad0042”{name}: {field} must be a boolean (got {typeof(v)}) — quad-base/src/Debounce.luau
- 언제:
Leading/Trailing옵션에boolean도nil도 아닌 값을 줬을 때. - 고치려면:
true/false중 하나로 주거나 생략하세요. - 참고:
q.Debounce{...}
Quad0044
섹션 제목: “Quad0044”{name}: Handle is already filled - one Handle Ref per :Apply (make a new Ref, or drop Handle and use the factory's :Flush()/:Cancel() broadcast; a Ref with a non-nil default is rejected the same way) — quad-base/src/Debounce.luau
- 언제:
opts.Handle로 넘긴Ref가 이미 다른:Apply호출의 제어 핸들로 채워져 있을 때(또는 기본값이nil이 아닌Ref를 애초에 줬을 때) — 하나의Ref는 하나의:Apply만 가리킬 수 있습니다. - 고치려면: 새
Ref를 새 팩토리와 함께 만들거나(Handle은 팩토리 옵션이라 팩토리를 재사용하면 새Ref가 붙지 않습니다),Handle을 빼고 팩토리의:Flush()/:Cancel()브로드캐스트를 쓰세요. - 참고: 제어 핸들(
GateHandle)
Quad0045
섹션 제목: “Quad0045”{name}: options must be a table (got {typeof(opts)}) — quad-base/src/Debounce.luau
- 언제:
q.Debounce{...}/q.Throttle{...}에 넘긴 옵션 자체가 테이블이 아닐 때(안 준 경우 포함). - 고치려면: 옵션 테이블을 넘기세요.
- 참고:
q.Debounce{...}
Quad0046
섹션 제목: “Quad0046”Throttle: MaxTime is Debounce-only (a throttle already passes every Time) — quad-base/src/Debounce.luau
- 언제:
q.Throttle{...}에MaxTime을 줬을 때 —Throttle은 이미 매Time마다 통과시키므로MaxTime개념이 없습니다. - 고치려면:
MaxTime을 빼세요(그 옵션은Debounce에서만 유효합니다). - 참고:
q.Throttle{...}
Quad0047
섹션 제목: “Quad0047”{name}: Handle must be a Ref (got {typeof(opts.Handle)}) — quad-base/src/Debounce.luau
- 언제:
Handle옵션에Ref가 아닌 값을 줬을 때. - 고치려면:
q.Ref<<QuadTypes.GateHandle?>>(nil)을 넘기세요. - 참고: 제어 핸들(
GateHandle)
Quad0048
섹션 제목: “Quad0048”{name}: Leading and Trailing both false would pass nothing through — quad-base/src/Debounce.luau
- 언제: 기본값을 적용한 결과
Leading과Trailing이 둘 다false가 될 때 — 그러면 아무 신호도 하류로 통과하지 못합니다.q.Debounce는Leading의 기본값이false라서Trailing = false하나만 줘도 여기에 해당합니다(q.Throttle은Leading의 기본값이true). - 고치려면: 적어도 하나는
true가 되게 하세요 —Debounce에서Trailing = false를 쓰려면Leading = true를 같이 주세요(둘 다 기본값을 건드리지 않는 것도 방법입니다). - 참고: 옵션
Quad0118
섹션 제목: “Quad0118”Operator.{name}: argument #{i} is nil — quad-base/src/Operator.luau
- 언제:
Sum/Product/Min/Max/Clamp/Band/Bor/Bxor/Shl/Shr같은 커링 콤비네이터를 만들 때i번째 인자가nil일 때 — 자리마다 검사하므로 조용히 사라져 뒤 인자를 당겨오지 않습니다.{name}은 실제로 부른 콤비네이터 이름입니다. - 고치려면: 그 자리에 실제 값(숫자나
State<number>)을 채우세요. - 참고: 공통 계약
Quad0119
섹션 제목: “Quad0119”Operator.{name}: argument #{i} must be a {kind} or a State<{kind}> (got {typeof(a)}) — quad-base/src/Operator.luau
- 언제: 커링 콤비네이터를 만드는 줄에서
i번째 인자가 기대하는 값 종류(kind, 보통number)도 그State<kind>도 아닐 때. - 고치려면: 숫자(또는 다른 콤비네이터가 요구하는 타입)나 그 타입의
State를 넘기세요. - 참고: 공통 계약
Quad0120
섹션 제목: “Quad0120”Operator.{name}: argument #{i} is a State whose current value is nil — quad-base/src/Operator.luau
- 언제: 인자로 넘긴
State의 현재값을 읽는 시점(연산이 도는 시점)에 그 값이nil일 때 — 갓 만든store:Of(...)나 없는 키를 읽은Indexed등이 원인일 수 있습니다. - 고치려면: 그
State가 항상 값을 갖게 하거나(기본값),Operator.Alternative로 먼저 nil을 걷어내세요. - 참고: 공통 계약
Quad0121
섹션 제목: “Quad0121”Operator.{name}: argument #{i} is a State whose current value must be a {kind} (got {typeof(v)}) — quad-base/src/Operator.luau
- 언제: 인자로 넘긴
State의 현재값이nil은 아니지만 기대하는 타입(kind)이 아닐 때. - 고치려면: 그
State가 항상 올바른 타입의 값을 내놓게 하세요. - 참고: 공통 계약
Quad0122
섹션 제목: “Quad0122”Operator.{name}: the Apply target's current value must be a {kind} (got {typeof(v)}) — quad-base/src/Operator.luau
- 언제:
state:Apply(factory)의 대상State자신의 현재값을 읽는 시점에 그 값이 기대하는 타입(kind)이 아닐 때 — 인자와 마찬가지로:Apply를 받는 State의 값도 검사합니다. - 고치려면:
:Apply하는 State가 항상 올바른 타입의 값을 갖게 하세요. - 참고: 공통 계약
Quad0124
섹션 제목: “Quad0124”Operator.Clamp: min must be <= max and neither NaN (got min {r[1]}, max {r[2]}) — quad-base/src/Operator.luau
- 언제:
Operator.Clamp(lo, hi)의 경계를 읽는 시점에lo > hi이거나 둘 중 하나가NaN(흔히0/0)일 때 — 반응형 경계가 한 프레임 엇갈리는 경우도 포함됩니다. - 고치려면:
lo/hi를 내놓는 State들의 관계를 확인해, 경계를 읽는 시점에lo <= hi이고 둘 다NaN이 아니게 하세요. - 관측(계약 아님): 경계가 한 프레임만 엇갈린 경우라면 지금은 경계가 돌아온 다음 세대에 그 노드가 다시 계산됩니다 — 던진 계산 함수가 새 세대에 다시 도는 것은 지금 구현의 결과이지 약속이 아닙니다(State).
- 참고:
q.Operator.Clamp(lo, hi)
Quad0125
섹션 제목: “Quad0125”Operator.Indexed: key must not be nil — quad-base/src/Operator.luau
- 언제:
Operator.Indexed<<V>>(key)를 만드는 즉시key가nil일 때. - 고치려면: 실제 키 값을 넘기세요.
- 참고:
q.Operator.Indexed<<V>>(key)
Quad0126
섹션 제목: “Quad0126”Operator.Indexed: key must be a plain value, not a State (the key is not reactive) — quad-base/src/Operator.luau
- 언제:
key자리에State를 넘겼을 때 — 다른 콤비네이터들이 전부T | State<T>를 받으므로 자연스러운 실수지만,Indexed의 키는 반응형이 아니라 그렇게 넘기면 조용히t[<State 객체>](항상 nil)를 읽습니다. - 고치려면: 키에는 plain 값을 넘기세요.
- 참고:
q.Operator.Indexed<<V>>(key)
Quad0127
섹션 제목: “Quad0127”Operator.Indexed: value is not a table (got {typeof(t)}) - cannot read [{tostring(key)}] — quad-base/src/Operator.luau
- 언제: 읽는 시점에
:Apply한 State의 현재값이 테이블이 아닐 때. - 고치려면:
Indexed를 붙인 State가 항상 테이블 값을 갖게 하세요. - 참고:
q.Operator.Indexed<<V>>(key)
Quad0128
섹션 제목: “Quad0128”Operator.Alternative: default must not be nil — quad-base/src/Operator.luau
- 언제:
Operator.Alternative(default)를 만드는 즉시default가nil일 때. - 고치려면: 기본값(plain 값이나 State)을 넘기세요.
- 참고:
q.Operator.Alternative(default)
Quad0129
섹션 제목: “Quad0129”Operator.Alternative: the default State's current value is nil — quad-base/src/Operator.luau
- 언제:
default로 넘긴State의 현재값이nil일 때(예: 아직 안 채운store:Of) — 기본값 자리에는 실제 값이 있어야 합니다. - 고치려면: 그
State가 항상 값을 갖게 하세요. - 참고:
q.Operator.Alternative(default)
Quad0181
섹션 제목: “Quad0181”Source: cannot Set a Modifier as a Source value — quad-base/src/Source.luau
Source: cannot hold a Modifier as a Source value — quad-base/src/Source.luau
State: a Compute function returned a Modifier - State/Source cannot hold Modifiers — quad-base/src/State.luau
- 언제:
source:Set(v)·source:SetIfChanged(v)·source:SetAndDispose(v)의v로Modifier(:Apply용 값)를 넘겼을 때(SetIfChanged는 값을 비교하기 전에,SetAndDispose는 쓰기 전에 검사하므로 값도 옛 값도 그대로입니다) —Source/State는 값 자리에Modifier를 담을 수 없습니다. - 언제:
q.Source(default)를 만들 때 초기값으로Modifier를 넘겼을 때. - 언제:
:Compute의 계산 함수가Modifier값을 반환했을 때. Operator 콤비네이터도 내부에서 같은 계산 노드를 쓰므로,q.Operator.Alternative(default)가Modifier인 기본값을 내놓거나q.Operator.Indexed(key)가 읽어 낸 값이Modifier일 때도 이 메시지가 납니다(메시지는 “Compute function”이라고 말합니다). - 고치려면:
Modifier가 아닌 평범한 값을 주세요(Set의 값, 초기값, 계산 함수의 반환 — Operator라면Alternative의 기본값이나Indexed로 읽는 테이블 칸).Modifier는:Apply에 넘기는 것입니다. - 참고:
q.Source(v),source:Set(v),source:SetIfChanged(v),source:SetAndDispose(v),state:Compute(fn, ...deps)
Quad0183
섹션 제목: “Quad0183”State: dep #{i} is not a State/Source — quad-base/src/State.luau
- 언제:
:Compute나:Depend에 넘긴 후행 의존성 중 하나가State도Source도 아닐 때. 번호는 리시버가 1번이라, 후행 의존성의 첫 자리가#2입니다. - 고치려면: 그 자리에
State나Source를 넘기세요. - 참고:
state:Compute(fn, ...deps)·state:Depend(...)
Quad0184
섹션 제목: “Quad0184”State: Compute fn is already running for this value - a dependency cycle (the fn reads its own value, directly or through a downstream State), a yield inside the fn, or an earlier read that threw (it runs again once an upstream changes) — quad-base/src/State.luau
- 언제: 계산 함수가 자기 자신의 값을 직접·간접(하류 State를 거쳐)으로 읽는 의존성 순환일 때, 또는 직전 계산이 던진 뒤 같은 세대(상류가 그 사이 움직이지 않음)에서 다시 읽을 때. 계산 함수 안의 yield는 정의되지 않은 동작이고, 그때 이 에러가 나는 자리(멈춘 사이 다른 코루틴이 같은 세대의 같은 노드를 읽을 때)는 UB에서의 현재 관측일 뿐 계약이 아닙니다.
- 고치려면: 계산 함수가 자기 자신을 순환 참조하지 않게 하고, 계산 함수 안에서 yield하지 마세요(정의되지 않은 동작 —
q.debug를 켜면 멈춘 계산 위에 새 계산이 시작될 때 경고 한 줄이 나옵니다). 직전 계산이 던진 것이 원인이면 그 예외의 원인을 고치세요. - 관측(계약 아님): 돌아오지 않는 코루틴이 계산하다 멈춘 노드는 상류가 바뀔 때까지 이 에러가 됩니다. 직전 계산이 던진 노드는 상류 값을 고쳐
:Set하면(새 세대) 지금은 다시 계산됩니다 — 다시 계산되는 것은 그 노드뿐이고, 던질 때 그 값을 읽던:List원소의 Slot은Length발행이 멈춘 채일 수 있습니다(그 값을 읽던Effect가 죽는 것은q.Effect의 계약입니다; State 레퍼런스). - 참고:
state:Compute(fn, ...deps)· quad 내부(프로퍼티 바인딩·Animate·Operator 등)가 그 State를 읽다 나면파일:줄접두가 quad 파일을 가리킵니다 — 디버깅 부록의 알려진 한계 3
Quad0186
섹션 제목: “Quad0186”State: dep #{i + 1} is nil — quad-base/src/State.luau
- 언제:
:Compute나:Depend의 후행 의존성 자리(...deps)에nil을 넘겼을 때 — 자리를 그냥 건너뛰면 뒤 의존성이 앞으로 밀려 잘못된 위치에 들어가므로, 조용히 사라지지 않고 에러입니다. 번호는 리시버가 1번이라, 후행 의존성의 첫 자리가#2입니다. - 고치려면: 그 자리를 실제 값으로 채우거나, 그 vararg 자체를 넘기지 마세요.
- 참고:
state:Compute(fn, ...deps)·state:Depend(...)
Quad0187
섹션 제목: “Quad0187”State: Compute fn must be a function (got {typeof(fn)}) — quad-base/src/State.luau
- 언제:
:Compute(fn, ...deps)의fn자리가 함수가 아닐 때. - 고치려면: 함수를 넘기세요.
- 참고:
state:Compute(fn, ...deps)
Quad0188
섹션 제목: “Quad0188”State: Gate setup must be a function (emit) -> onUpstreamEmit (got {typeof(setup)}) — quad-base/src/State.luau
- 언제:
:Gate(setup)의setup자리가 함수가 아닐 때. - 고치려면:
(emit) -> onUpstreamEmit모양의 함수를 넘기세요. - 참고:
state:Gate(setup)
Quad0189
섹션 제목: “Quad0189”State: Gate setup must return the onUpstreamEmit function — quad-base/src/State.luau
- 언제:
:Gate(setup)이 생성 시 딱 한 번 불렸는데,setup이 함수가 아닌 것을 반환했을 때. - 고치려면:
setup이 상류 emit마다 불릴 클로저(함수)를 반환하게 하세요. - 참고:
state:Gate(setup)
Quad0190
섹션 제목: “Quad0190”State: Observer fn must be a function or nil (got {typeof(fn)}) - nil makes the always-observe utility — quad-base/src/State.luau
- 언제:
:Observer(fn)의fn자리가 함수도nil도 아닐 때. - 고치려면: 콜백 함수를 넘기거나, 값 없이 그냥 관측만 하려면
nil을 넘기세요. - 참고:
state:Observer(fn)
Quad0191
섹션 제목: “Quad0191”State: Apply factory must be a function or an object with an __apply method (got {typeof(factory)}) — quad-base/src/State.luau
- 언제:
:Apply(factory)의factory자리가 함수도,__apply메소드를 가진 객체도 아닐 때. - 고치려면: 함수를 넘기거나
__apply를 구현한 객체(Blocker,Debounce/Throttle등)를 넘기세요. - 참고:
state:Apply(factory)
Quad0192
섹션 제목: “Quad0192”State: State.Init(module) has not run for this quad instance — quad-base/src/State.luau
- 언제: quad 모듈 인스턴스에서
State서브시스템이 아직RunInit으로 설치되지 않은 채로 그 설치물을 찾을 때 던지는 내부 불변조건 검사입니다. 이 검사를 부르는 곳은Source서브시스템의 설치 하나뿐이고, 그 설치가 바로 앞에서State를 먼저 설치하므로 현재 공개 표면에서 이 조건에 닿는 호출은 없습니다. - 고치려면: (문서 미정 — 현재 도달 경로가 없습니다)
- 참고:
q:RunInit(initFn)
Quad0193
섹션 제목: “Quad0193”Store: {what} must be a non-empty string (got {if name == "" then '""' else typeof(name)}) — quad-base/src/Store.luau
- 언제:
{what}은 생성자에서key,:Of에서Of name입니다 —q.Store(defaults)의 키나store:Of(name)의name이 문자열이 아니거나 빈 문자열일 때. - 고치려면: 비어 있지 않은 문자열 키를 쓰세요.
- 참고:
q.Store(defaults)·store:Of<<U>>(name)
Quad0194
섹션 제목: “Quad0194”Store: "{name}" is a reserved store key — quad-base/src/Store.luau
- 언제:
q.Store(defaults)의 키나store:Of(name)의name으로 예약된 이름(Of,Names,__로 시작하는 이름)을 썼을 때. - 고치려면: 다른 이름을 쓰세요 — 예약 목록은 예약 키를 보세요.
- 참고: 예약 키
Quad0195
섹션 제목: “Quad0195”Store: defaults must be a table of Sources (got {typeof(defaults)}) — quad-base/src/Store.luau
- 언제:
q.Store(defaults)의defaults가 테이블이 아닐 때(생략은 허용 — 빈 Store가 됩니다). - 고치려면:
{ name = Source, ... }모양의 테이블을 넘기거나 아예 생략하세요. - 참고:
q.Store(defaults)
Quad0196
섹션 제목: “Quad0196”Store: defaults must be a plain table without a metatable (a bare Source instead of { name = Source }?) — quad-base/src/Store.luau
- 언제:
q.Store(defaults)에 메타테이블이 달린 테이블(Source하나를 감싸는 테이블 없이 그대로 넘긴 경우 등)을 넘겼을 때. - 고치려면:
Source를{ name = source }꼴로 감싸 넘기세요. - 참고:
q.Store(defaults)
Quad0197
섹션 제목: “Quad0197”Store: defaults must be a plain { name = Source } table (got an AttrKey/Mapper descriptor) — quad-base/src/Store.luau
- 언제:
q.Store(defaults)에AttrKey/Mapper같은 브랜드 값을 넘겼을 때 — 평범한{ name = Source }테이블이 아닙니다. - 고치려면: 평범한
{ name = Source }테이블을 넘기세요. - 참고:
q.Store(defaults)
Quad0198
섹션 제목: “Quad0198”Store: default for "{tostring(name)}" is not a Source (got {typeof(value)}) — quad-base/src/Store.luau
- 언제:
q.Store(defaults)의 값 자리가Source가 아닐 때 — 생성자에서만 검사합니다(store:Of(name)은 없는 이름에 새Source를 만들 뿐 이 검사를 거치지 않습니다). - 고치려면: 값 자리를
Source로 채우세요. - 참고:
q.Store(defaults)
Quad0255
섹션 제목: “Quad0255”Context: takes no arguments (got {n} argument{if n == 1 then "" else "s"}) - create an empty Context and fill it with ctx:Set(provider, value) — quad-base/src/Context.luau
- 언제:
q.Context(...)에 인자를 하나라도 줬을 때 — 흔히Tag·Attr·Store처럼 초기값 테이블을 넘기려는q.Context({ [P] = v }). 전에는 인자를 조용히 버려 나중에:Get(P)에서Quad0038로 죽었습니다.{n}은 넘긴 인자 개수입니다(nil하나도 1로 셉니다). - 고치려면:
q.Context()로 빈 가방을 만들고ctx:Set(provider, value)로 채우세요. - 참고:
q.Context()
폐기된 번호
섹션 제목: “폐기된 번호”업데이트로 폐기되어 더는 나오지 않는 에러 번호입니다. 옛 번호를 만났다면 아래 목록에서 지금 쓰는 번호를 찾으세요.
폐기된 번호 목록
- Quad0043 — 4.0.0부터 같은 실수는
Quad0018입니다. 옛 문구:{self._name}: Apply target must be a State (got {typeof(state)}) - Quad0123 — 4.0.0부터 같은 실수는
Quad0018입니다. 옛 문구:Operator.{name}: Apply target must be a State (got {typeof(self)}) - Quad0182 — 4.0.0부터 같은 실수는
Quad0181입니다. 옛 문구:Source: cannot hold a Modifier as a Source value - Quad0185 — 4.0.0부터 같은 실수는
Quad0181입니다. 옛 문구:State: a Compute function returned a Modifier - State/Source cannot hold Modifiers - Quad0261 — 이제 던지지 않습니다. 인자 수가 정해진 연산자 팩토리(
q.Operator.Clamp(lo, hi),Shl(n),Shr(n))에 넘친 인자를 잠깐 거부했다가, 다른 Lua 함수처럼 조용히 무시하는 동작으로 되돌렸습니다(strict 타입 검사는 넘친 인자를 잡습니다). 이 번호는 다른 에러에 다시 쓰지 않습니다. 참고:q.Operator.Clamp(lo, hi). 옛 문구:Operator.{name}: takes {want} argument{if want == 1 then "" else "s"} (got {got})
답변함: 0 / 0 (0%)