타입 문법

일반적인 타입에 대해 편리하게 쓸 수 있는 문법을 제공합니다. C 바인딩을 작성할 때 특히 유용하고, 앞서 본 경우 중 하나라면 언제든 사용할 수 있습니다.

제너릭

일반적인 타입과 제너릭을 사용할 수 있습니다.

Int32
My::Nested::Type
Array(String)

공용체

alias Int32OrString = Int32 | String

막대기(|)를 사용하여 공용체 타입을 생성합니다. Int32 | String는 "Int32 또는 String"으로 읽습니다. 일반 코드에서 Int32 | StringInt32| 메서드에 String 인자를 넘겨 호출하는 것으로 해석됩니다.

Nil이 될 수 있는 경우

alias Int32OrNil = Int32?

이는 다음과 같습니다.

alias Int32OrNil = Int32 | ::Nil

일반 코드에서 Int32?는 문법 오류입니다.

포인터

alias Int32Ptr = Int32*

이는 다음과 같습니다.

alias Int32Ptr = Pointer(Int32)

일반 코드에서 Int32*Int32* 메서드를 호출하는 것으로 해석됩니다.

StaticArray

alias Int32_8 = Int32[8]

이는 다음과 같습니다.

alias Int32_8 = StaticArray(Int32, 8)

일반 코드에서 Int32[8]Int32[] 메서드에 8을 인자로 넘겨 호출하는 것으로 해석됩니다.

Tuple

alias Int32StringTuple = {Int32, String}

이는 다음과 같습니다.

alias Int32StringTuple = Tuple(Int32, String)

일반 코드에서 {Int32, String}Int32String 타입 자체를 원소로 갖는 튜플 인스턴스입니다. 이는 위의 튜플 타입과는 다른 것입니다.

NamedTuple

alias Int32StringNamedTuple = {x: Int32, y: String}

이는 다음과 같습니다.

alias Int32StringNamedTuple = NamedTuple(x: Int32, y: String)

일반 코드에서 {x: Int32, y: String}xInt32를, yString을 갖는 이름 달린 튜플 인스턴스입니다. 이는 위의 튜플 타입과는 다른 것입니다.

Proc

alias Int32ToString = Int32 -> String

이는 다음과 같습니다.

alias Int32ToString = Proc(Int32, String)

인자 없는 프록은 다음과 같이 씁니다.

alias ProcThatReturnsInt32 = -> Int32

인자가 여러 개인 프록은 다음과 같습니다.

alias Int32AndCharToString = Int32, Char -> String

중첩된 프록(또는 어떤 다른 타입)은 다음과 같이 괄호를 써서 나타낼 수 있습니다.

alias ComplexProc = (Int32 -> Int32) -> String

일반 코드에서 Int32 -> String는 문법 오류입니다.

self

타입 문법에서 self를 이용하여 self 타입을 표기할 수 있습니다. 자세한 것은 타입 제약 항목을 참고하세요.

class

class는 인스턴스의 타입이 아닌 클래스 타입을 나타냅니다.

def foo(x : Int32)
  "인스턴스"
end

def foo(x : Int32.class)
  "클래스"
end

foo 1     # "인스턴스"
foo Int32 # "클래스"

class는 클래스 타입의 배열 및 집합을 만들 때 유용합니다.

class Parent
end

class Child1 < Parent
end

class Child2 < Parent
end

ary = [] of Parent.class
ary << Child1
ary << Child2

밑줄

타입 제약에서 밑줄을 쓸 수 있습니다. 밑줄은 어느 타입에든 해당됩니다.

# 제약을 특정하지 않는 것과 동일하여 별로 의미가 없음
def foo(x : _)
end

# 두 인자를 받아 Int32를 반환하는 프록을 정의하여 조금 더 유용
def foo(x : _, _ -> Int32)
end

typeof

타입 문법에서 typeof를 사용할 수 있습니다. typeof는 전달된 표현식의 공용체 타입을 반환합니다.

typeof(1 + 2) # => Int32
typeof(1, "a") # => (Int32 | String)

results matching ""

    No results matching ""