3.4.0 이후의 모든 버전
3.4.0
Added
q.NewModule()— 모듈 인스턴스를 새로 만드는 함수(3.3의q.New()자리 — 아래 Changed).q.Raw— 백엔드가 타입드 표면을 짓는 base 원재료:q.Raw.Modifier(3.3의q.Modifier묶음),q.Raw.Spread,q.Raw.Mapper(3.3의q.newMapperClass).- Spread — 요소 테이블처럼 쓴 테이블을 요소의 숫자 키 자리에 펼쳐 넣는 일회용 묶음(quad-roblox에서는
q.Spread "Frame" {…}— 아래 항목, base 원재료는q.Raw.Spread {…}). 같은 키는 먼저 자리 잡은 쪽이 이기고(인라인 키가 맨 앞), Modifier보다 앞섭니다. 안에 놓인 Spread는 만들 때 펴지고,spread:Append(other)는 다른 Spread만 받아 끝에 더하며 아무것도 돌려주지 않습니다. 요소에 놓이거나 다른 Spread에 펴진 Spread는 잠겨 더 이상:Append할 수 없습니다.q.debug이면 앞선 Spread에 밀려난 함수 값을 알립니다. - quad-roblox: 클래스를 먼저 받는 생성자 —
q.Elem "Frame" {…},q.Modifier "Frame" (),q.Spread "Frame" {…},q.Mapper "Frame" (key) {…},q.OnChange "Frame" "Text" (fn),q.Out "Frame" "Text" (src), 새q.OnEvent "Frame" "MouseEnter" (fn)(같은 이벤트를 여러 번 걸 수 있는 배열부 디스크립터), 그리고 자기 클래스 맵으로 같은 표면을 받는q.ForClasses<<Map>>(). 타입은 생성 파일이 아니라 여러분의 타입 검사기가 가진 Roblox 클래스 타입에서 타입 함수가 계산합니다 — 새 타입 솔버가 필요하고, 3.3에서 필수였던 한도 플래그 셋은 이제 권장입니다(기본 한도에서도 대부분 검사되지만, 조상 클래스의Modifier<GuiObject>같은 타입을 주석으로 단 자리는 “too complex”가 날 수 있습니다 — 설치 문서). - quad-roblox: 클래스를 인자로 받는 타입 이름 —
Props<C>·PropsHashPart<C>·PropsArrayItem<C>·MapperProps<C>·ElemCtor<C>·PropertyMap<C>·Modifier<C>·ModifierInto<C>·Spread<C>·SpreadInto<C>·OnChangeDescriptor<K>·OnEventDescriptor<K>·ModifierField<T>·ModifierFieldOut<T>. Quad0281—q.OnChange·q.Out·q.OnEvent의 클래스 단계나 이름 단계에 인자를 둘 이상 넘기면(3.3의q.OnChange("Text", fn)꼴, 또는q.OnChange "TextLabel" ("Text", fn)) 그 자리에서 알려 줍니다.
Changed
- BREAKING quad-roblox:
q.Declaration(D.Frame {…}·D.New·D.Modifier.<Class>·D.Mapper.<Class>·D.Mapper.Root)이 없어졌습니다 —q.Elem "Frame" {…}·q.Modifier "Frame" ()·q.Mapper "Frame" (key) {…}·q.MapperRoot를 쓰세요.scripts/migrate-3.4.py <폴더>가 대부분을 기계로 옮깁니다(--check로 미리 보기, 못 옮긴 자리는 보고). - BREAKING
q.New()→q.NewModule(),q.Modifier(...)(타입 없는 base) →q.Raw.Modifier(...)(q.Modifier는 이제q.Modifier "Frame"꼴의 타입드 생성자),q.newMapperClass(name)→q.Raw.Mapper(name). 옮기는 법: 이름만 바꾸면 됩니다(변환 스크립트가 합니다). - BREAKING quad-roblox:
q.OnChange(name, fn)·q.Out(name, src)→q.OnChange "Class" "Name" (fn)·q.Out "Class" "Name" (src). 클래스를 먼저 받아 그 클래스의 타입으로 검사합니다(3.3에서 클래스마다 타입이 다른 이름 여섯이any였던 것과q.Out이 그 이름에서 올바른Source를 거부하던 것이 함께 풀립니다). 옮기는 법: 놓을 요소의 클래스를 앞에 적으세요. - BREAKING quad-roblox 타입: 클래스별 이름(
FrameModifier·IntoFrame·FrameElem)과 생성 모듈의 이름(Declaration·DeclarationMapper·PropTypes·OnChangeFn·OutFn·Field<T>·FieldOut<T>), 자식 자리 유니언NewChild가 없어졌습니다 —Modifier<Frame>·ModifierInto<Frame>·ModifierField<T>·PropsArrayItem<Frame>처럼 클래스를 인자로 받는 이름이 그 자리입니다. quad-types의Field<T>/FieldOut<T>도ModifierField<T>/ModifierFieldOut<T>가 됐습니다. quad-roblox 루트의OnChangeDescriptor는 이름을 인자로 받는OnChangeDescriptor<K>가 됐습니다(옮기는 법: 이름을 모르는 자리는OnChangeDescriptor<string>). - BREAKING quad-roblox 타입: 컴포넌트가 Modifier를 받는 자리
ModifierInto<C>는 메소드 없는 마커입니다 — 3.3의Into<Class>처럼AsTextButton메소드를 가진 값이면 무엇이든 받는 인터페이스가 아니어서, 직접 만든 커스텀 클래스 Modifier(q.Raw.Modifier.TypedFactory)는 그 자리에 바로 들어가지 않습니다. 옮기는 법: 넘기는 쪽에서:AsTextButton()으로 내려서 넘기세요. - BREAKING quad-roblox 타입: 요소의 배열부가 무타입 base Modifier(
q.Raw.Modifier(...), 3.3의q.Modifier(...))를 받지 않습니다 — 필드가 하나도 검사되지 않는 자리라서입니다(런타임은 그대로 동작). 옮기는 법: 놓을 요소의 클래스로q.Modifier "Frame" {…}처럼 만드세요(scripts/migrate-3.4.py는 그런 자리를 고치지 않고 보고합니다). 같은 이유로q.Raw.Spread {…}도 받지 않습니다 —q.Spread "Frame" {…}를 쓰세요. - quad-roblox 타입: Modifier 변환 함수의
old와mod:Peek의 결과에서State·Tween팔이 읽기 뷰(State는Get만,Tween은Value만)가 됐습니다 — 다른 메소드가 필요하면q.isState(old)로 확인한 뒤 캐스트하세요. Quad0026·Quad0029·Quad0034·Quad0106·Quad0108·Quad0219·Quad0241·Quad0063·Quad0264의 메시지가 새 이름(q.Elem·q.Raw.Mapper·q.NewModule())을 말하고,Quad0224(q.Out에Source가 아닌 값)는 커리 꼴에 맞게 “second argument” 대신"Text" needs a Source to write back into로 말합니다.
Fixed
slot:Lazy(fn)의fn이q.None을 돌려주는 것을 strict 타입 검사가 거부하던 것 — 런타임은nil처럼 빈 내용으로 받는데 타입이 막았습니다. 이제fn: () -> (SlotElement<T> | None)?입니다.slot:Lazy의fn이 이미 다른 자리에 마운트된 원소를 돌려줄 때 나는Quad0156의 설명이:List의updateFn·State원인만 말하던 것 —:Lazy원인도 적습니다.Quad0272(slot:Lazy의fn이 값을 둘 이상 돌려줌)가 던진 뒤fn이 만든 원소가 정리되지 않고 남는다는 것을 말하지 않던 것 — 메시지와 문서가 그 사실을 적습니다(동작은 그대로: quad는 사용자 실수로 깨진 자리를 대신 치우지 않습니다).
3.5.0
Added
q:GetOrCreate(key, build)— 모듈 인스턴스마다의 결과 캐시. 처음 부를 때build(q)를 돌려 값을 기억하고, 같은 열쇠로 다시 부르면 그 값을 돌려줍니다. 컴포넌트 킷처럼 q를 넘겨받아 쓰는 코드가 모듈을 q의 팩토리로 만들 때 씁니다(require("./Common")(q)가 같은 q에서 한 벌만 만들어짐). 캐시는 인스턴스와 함께 수거되고, 만드는 중인 열쇠를 다시 부르면 에러입니다.q:AssertProvider(name, versionPattern)— 받은 q에 필요한 백엔드가 맞는 버전으로 설치돼 있는지 확인하고, 아니면 “설정 모듈에서UseProvider를 먼저”라고 알리며 던집니다. 프로바이더 함수가 아니라 이름과 버전으로 비교하므로 패키지 사본이 달라도 같은 백엔드로 알아봅니다.q.Backend.provider— 프로바이더가 자기 이름과 버전({ name, version })을 적는 자리. quad-roblox는 설치 때{ name = "quad-roblox", version = <자기 버전> }을 적습니다. 직접 만든 프로바이더도AssertProvider로 확인받으려면 여기에 적으세요.QuadTypes.SlotCtx<Item, UD, T>—slot:List·slot:Single의updateFn이 받는ctx의 타입 이름(항목, 사용자 데이터, 원소 타입). 파일마다 같은 레코드를 다시 적던 자리를type RowCtx = QuadTypes.SlotCtx<Row, nil, Instance>한 줄로 쓸 수 있습니다.
Changed
- quad(quad-base·quad-roblox)의
q.debug진단 줄이 모두[quad debug]로 시작합니다 — Studio 출력에서 자기print와 구분됩니다. 진단 문구를 통째로 비교하던 테스트는 접두를 넣거나 부분 일치로 바꾸세요. Quad0076: 숫자 키 자리에 함수가 오면({ q.Elem "Frame" }처럼 호출을 빠뜨린 경우) 프로바이더 설정을 의심하라는 꼬리 대신 “호출하지 않은 생성자나 컴포넌트”를 묻는 꼬리를 붙입니다.Quad0109·Quad0110·Quad0113(Observer): 메시지가 “콜백 안에서”뿐 아니라 “콜백이 앞서 던진 뒤”인 경우도 말합니다 — 던진 콜백은 실행 중 표시를 남깁니다.
4.0.0 Latest
Changed
- 3.x 안정화 구간을 닫습니다. 이제 호환이 깨지는 변경은 메이저 버전에만 싣습니다 — 설치 줄은
~3.5.0대신^4.0.0으로 적으세요.q:AssertProvider나 커스텀 프로바이더에3.x패턴을 적어 둔 코드는Quad0289·Quad0228로 막히니4.0^.0^류로 바꾸세요.quad_error와type_version_check는 이 릴리즈 뒤로 각자의 번호로 올라갑니다. 공식 킷 둘(qwreey/quad_kit_roblox_devui·qwreey/quad_kit_roblox_material)이 4.0.0으로 처음 게시됩니다. - BREAKING 에러 번호를 실수 단위로 합쳤습니다 — 같은 규칙을 어기면 경로·
q.debug·Effect/Observer차이와 상관없이 같은 번호입니다. 이제 어떤 실수가 어느 번호로 보고되는지는 계약이고(바꾸면 메이저), 메시지 문구는 계약이 아닙니다. 옮기는 법: 번호로 분기하던 코드가 있으면 아래 표대로 새 번호로 바꾸세요. 폐기된 번호는 레퍼런스 각 페이지 끝의 접힌 목록에 남아 새 번호를 가리키고 다른 뜻으로 재사용되지 않습니다.
| 폐기 | 새 번호 |
|---|---|
Quad0003 · Quad0006 · Quad0013 |
Quad0001 |
Quad0005 · Quad0009 |
Quad0004 |
Quad0043 · Quad0123 · Quad0252 |
Quad0018 |
Quad0158 · Quad0162 |
Quad0020 |
Quad0064 |
Quad0057 |
Quad0264 |
Quad0063 |
Quad0097 · Quad0116 · Quad0137 · Quad0274 · Quad0277 |
Quad0068 |
Quad0109 |
Quad0087 |
Quad0090 · Quad0110 · Quad0113 |
Quad0088 |
Quad0091 · Quad0111 · Quad0114 |
Quad0089 |
Quad0112 |
Quad0092 |
Quad0115 |
Quad0093 |
Quad0164 · Quad0165 · Quad0242 |
Quad0140 |
Quad0151 |
Quad0142 |
Quad0160 · Quad0172 |
Quad0156 |
Quad0171 |
Quad0170 |
Quad0182 · Quad0185 |
Quad0181 |
Quad0204 · Quad0237 |
Quad0200 |
Quad0211 |
Quad0209 |
Quad0241 |
Quad0219 |
Quad0231 · Quad0234 · Quad0235 |
Quad0230 |
Quad0233 |
Quad0232 |
Quad0245 |
Quad0244 |
Tween의 콜백 셋(Started·Completed·Cancelled),tween:Wrapped와tween:Mapped의wrap,q.ForClasses와 타입 함수가 계산하는 표면의 세부를 unstable로 표시했습니다 — SemVer 보증 밖이고, 바뀌면 이 파일의 Changed에(unstable)을 달아 알립니다. 동작 변경은 없습니다.Completed의 정의를 문서에 못 박았습니다 — 끝났는지는Completed가 나왔는가로만 정하고, 프로퍼티가 목표에 닿았는지는 묻지 않습니다.Completed전에 교체되거나 철거되면 언제나Cancelled입니다. 그래서 엔진이 목표에 닿았지만 통지가 아직인 트윈을 교체하면 전에는Completed였고 이제Cancelled입니다(unstable — 실측에서 사용자 코드가 그 사이에 끼어든 경우는 없었습니다).
답변함: 0 / 0 (0%)