Changelog (변경 이력)
버전 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는 사용자 실수로 깨진 자리를 대신 치우지 않습니다).
답변함: 0 / 0 (0%)