어떤 타입이 _타입 매개변수_를 사용해 모든 타입의 값을 담을 수 있으면, 그 타입은 _제네릭 타입_이에요.
예를 들어 이 Box 타입에는 타입 매개변수 a가 있어요(소문자로 써요).
pub type Box(a) {
Box(a)
}
a 타입 매개변수는 어떤 타입이든 대신하는 자리 표시자라서, Box는 문자열, 정수 또는 그 밖의 다른 어떤 타입과도 함께 쓸 수 있어요.
Box("Hello, Joe!") // The type is Box(String)
Box(42) // The type is Box(Int)
타입 매개변수는 쉼표로 구분해서 여러 개를 둘 수 있어요.
pub type Pair(a, b) {
Pair(a, b)
}
타입 매개변수는 함수의 인자에도 쓸 수 있어요.
이 함수는 타입 a의 값을 받아서, a를 받고 b를 반환하는 함수를 두 번 호출해요.
pub fn twice(value: a, f: fn(a) -> b) -> b {
f(value)
f(value)
}
// The type is fn(String, fn(String) -> Nil) -> Nil
twice("Hello, Joe!", io.println)
이번 연습 문제에서는 보물을 담아 둘 제네릭(그리고 마법 같은!) TreasureChest를 작성해 봐요.
variant가 하나뿐인 TreasureChest 사용자 정의 타입을 정의해요.
이 variant에는 연관된 String 값이 있어야 하는데, 이 값은 보물 상자의 비밀번호를 저장하는 데 써요.
또한 이 variant에는 연관된 제네릭 값도 있어야 하는데, 이 값은 보물을 저장하는 데 써요. 보물이 무엇이든 될 수 있도록 이 값은 제네릭이에요.
variant가 두 개인 UnlockResult 사용자 정의 타입을 정의해요.
첫 번째 variant는 Unlocked이고, 보물을 저장하는 데 쓸 제네릭 값을 담아야 해요.
두 번째 variant는 WrongPassword이고, 아무 값도 담지 않아요.
이 함수는 매개변수 두 개를 받아요.
TreasureChest 제네릭 사용자 정의 타입String (비밀번호를 시도해 볼 때 써요)이 함수는 주어진 비밀번호 시도가 TreasureChest 안의 String과 일치하는지 확인해요.
함수는 UnlockResult를 반환해요.
비밀번호가 일치하면 TreasureChest의 제네릭 값(바로 보물이에요!)과 함께 Unlocked를 반환해요.
비밀번호가 일치하지 않으면 WrongPassword를 반환해요.
Exercism에 가입하고 Gleam 트랙을 개념 33개연습 문제 122개, 그리고 실제 사람의 멘토링과 함께 배우고 익혀 보세요. 모두 무료예요.