구조체, 열거형과 타입 별칭
구조체 필드·메서드, proto 확장, 명시적 표현 타입을 가진 enum과 타입 별칭을 설명합니다.
Wave Foundation
구조체
struct Point {
x: f64;
y: f64;
}
fun main() {
var point: Point = Point { x: 1.0, y: 2.0 };
println("{}", point.x);
}
구조체 필드는 name: type; 형태입니다. 필드 접근은 value.field을 사용합니다.
구조체 내부 메서드
구조체 본문에는 fun 메서드를 둘 수 있습니다. proto를 사용하면 이미 정의한 구조체의 메서드를 별도 블록에 작성할 수 있습니다.
struct Counter {
value: i32;
}
proto Counter {
fun current(self: Counter) -> i32 {
return self.value;
}
}
호출은 일반적인 메서드 표기를 사용합니다.
var counter: Counter = Counter { value: 3 };
var value: i32 = counter.current();
열거형
열거형은 값을 표현할 정수 타입을 -> 뒤에 명시합니다.
enum State -> i32 {
Ready = 0,
Running,
Stopped,
}
variant에 정수 값을 직접 지정할 수 있습니다. 첫 variant의 값을 생략하면 0부터 시작하고, 이후 생략된 값은 바로 앞 값보다 1 큽니다.
타입 별칭
type FileHandle = i64;
타입 별칭은 같은 타입을 코드의 문맥에 맞는 이름으로 표현하는 문법입니다. FileHandle로 선언한 값은 i64 값처럼 그대로 사용할 수 있고 함수 인자와 반환 타입에도 쓸 수 있습니다.
ABI와 레이아웃
Wave 구조체를 외부 ABI나 바이너리 파일 형식과 공유하려면 대상 ABI가 요구하는 크기, 정렬과 필드 배치를 명시적으로 맞춰야 합니다. 필드 순서만으로 다른 언어의 구조체와 같은 메모리 배치를 가정하지 마십시오.