C 바인딩 enum
C 바인딩 enum (C Bindings enum)
C 라이브러리를 Crystal에서 쓰다 보면 C의 enum을 그대로 표현해야 할 때가 있어요. lib 안에서 enum 선언을 하면 C enum을 선언하게 됩니다.
lib X
# In C:
#
# enum SomeEnum {
# Zero,
# One,
# Two,
# Three,
# };
enum SomeEnum
Zero
One
Two
Three
end
end
C에서와 마찬가지로, enum의 첫 번째 멤버는 값 0을 갖고 그다음 값은 하나씩 증가해요.
값을 사용하려면 이렇게 해요.
X::SomeEnum::One # => One
멤버의 값을 직접 지정할 수도 있어요.
lib X
enum SomeEnum
Ten = 10
Twenty = 10 * 2
ThirtyTwo = 1 << 5
end
end
보시다시피 멤버 값에는 기본적인 수학 연산이 허용돼요: +, -, *, /, &, |, <<, >> 그리고 %.
enum 멤버의 타입은 기본적으로 Int32예요. 상수 값에 다른 타입을 지정하면 오류가 납니다.
lib X
enum SomeEnum
A = 1_u32 # Error: enum value must be an Int32
end
end
하지만 이 기본 타입은 바꿀 수 있어요.
lib X
enum SomeEnum : Int8
Zero
Two = 2
end
end
X::SomeEnum::Zero # => 0_i8
X::SomeEnum::Two # => 2_i8
enum은 fun의 매개변수나 struct·union의 멤버 타입으로 쓸 수 있어요.
lib X
enum SomeEnum
One
Two
end
fun some_fun(value : SomeEnum)
end
더 알아보기 (Learn more)
- Crystal 공식 문서 - C bindings enum
- C bindings — C 라이브러리 바인딩 전체