콘텐츠로 이동

에러 코드 — 반응형 코어

각 절은 ### QuadNNNN — 메시지 원문(자리표시자는 {…}), 언제 나는가, 어떻게 고치는가. 번호로 찾으려면 색인.

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)

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)

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?)

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)

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)

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)

{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{...}

{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{...}

{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{...}

{name}: {field} must be a boolean (got {typeof(v)}) — quad-base/src/Debounce.luau

  • 언제: Leading/Trailing 옵션에 boolean도 nil도 아닌 값을 줬을 때.
  • 고치려면: true/false 중 하나로 주거나 생략하세요.
  • 참고: q.Debounce{...}

{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)

{name}: options must be a table (got {typeof(opts)}) — quad-base/src/Debounce.luau

  • 언제: q.Debounce{...}/q.Throttle{...}에 넘긴 옵션 자체가 테이블이 아닐 때(안 준 경우 포함).
  • 고치려면: 옵션 테이블을 넘기세요.
  • 참고: q.Debounce{...}

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{...}

{name}: Handle must be a Ref (got {typeof(opts.Handle)}) — quad-base/src/Debounce.luau

  • 언제: Handle 옵션에 Ref가 아닌 값을 줬을 때.
  • 고치려면: q.Ref<<QuadTypes.GateHandle?>>(nil)을 넘기세요.
  • 참고: 제어 핸들(GateHandle)

{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를 같이 주세요(둘 다 기본값을 건드리지 않는 것도 방법입니다).
  • 참고: 옵션

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>)을 채우세요.
  • 참고: 공통 계약

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를 넘기세요.
  • 참고: 공통 계약

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을 걷어내세요.
  • 참고: 공통 계약

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가 항상 올바른 타입의 값을 내놓게 하세요.
  • 참고: 공통 계약

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가 항상 올바른 타입의 값을 갖게 하세요.
  • 참고: 공통 계약

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)

Operator.Indexed: key must not be nil — quad-base/src/Operator.luau

  • 언제: Operator.Indexed<<V>>(key)를 만드는 즉시 key가 nil일 때.
  • 고치려면: 실제 키 값을 넘기세요.
  • 참고: q.Operator.Indexed<<V>>(key)

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)

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)

Operator.Alternative: default must not be nil — quad-base/src/Operator.luau

  • 언제: Operator.Alternative(default)를 만드는 즉시 default가 nil일 때.
  • 고치려면: 기본값(plain 값이나 State)을 넘기세요.
  • 참고: q.Operator.Alternative(default)

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)

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)

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(...)

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

State: dep #{i + 1} is nil — quad-base/src/State.luau

  • 언제: :Compute나 :Depend의 후행 의존성 자리(...deps)에 nil을 넘겼을 때 — 자리를 그냥 건너뛰면 뒤 의존성이 앞으로 밀려 잘못된 위치에 들어가므로, 조용히 사라지지 않고 에러입니다. 번호는 리시버가 1번이라, 후행 의존성의 첫 자리가 #2입니다.
  • 고치려면: 그 자리를 실제 값으로 채우거나, 그 vararg 자체를 넘기지 마세요.
  • 참고: state:Compute(fn, ...deps) · state:Depend(...)

State: Compute fn must be a function (got {typeof(fn)}) — quad-base/src/State.luau

  • 언제: :Compute(fn, ...deps)의 fn 자리가 함수가 아닐 때.
  • 고치려면: 함수를 넘기세요.
  • 참고: state:Compute(fn, ...deps)

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)

State: Gate setup must return the onUpstreamEmit function — quad-base/src/State.luau

  • 언제: :Gate(setup)이 생성 시 딱 한 번 불렸는데, setup이 함수가 아닌 것을 반환했을 때.
  • 고치려면: setup이 상류 emit마다 불릴 클로저(함수)를 반환하게 하세요.
  • 참고: state:Gate(setup)

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)

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)

State: State.Init(module) has not run for this quad instance — quad-base/src/State.luau

  • 언제: quad 모듈 인스턴스에서 State 서브시스템이 아직 RunInit으로 설치되지 않은 채로 그 설치물을 찾을 때 던지는 내부 불변조건 검사입니다. 이 검사를 부르는 곳은 Source 서브시스템의 설치 하나뿐이고, 그 설치가 바로 앞에서 State를 먼저 설치하므로 현재 공개 표면에서 이 조건에 닿는 호출은 없습니다.
  • 고치려면: (문서 미정 — 현재 도달 경로가 없습니다)
  • 참고: q:RunInit(initFn)

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)

Store: "{name}" is a reserved store key — quad-base/src/Store.luau

  • 언제: q.Store(defaults)의 키나 store:Of(name)의 name으로 예약된 이름(Of, Names, __로 시작하는 이름)을 썼을 때.
  • 고치려면: 다른 이름을 쓰세요 — 예약 목록은 예약 키를 보세요.
  • 참고: 예약 키

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)

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)

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)

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)

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})