2016-11-19 1 views
1

Crystal-lang 메서드는 특정 형식의 여러 값을 반환 할 수 있습니까?크리스탈 메서드는 여러 값을 반환합니다.

나는 그것이 이런 방식으로 구현 될 수 있다는 사실을 알고 :

def my_method(arg_1 : Int, arg_2 : String) : Tuple 
    return arg_1, arg_2 
end 

res_1, res_2 = my_method(1, "1") 

하지만 내가 할 경우도 작동 :

result = my_method(1, "1") #=> {1,"2"} 

을하지만, 내가 좋아하는 somethink 할 수 Go-lang

def my_method(arg_1 : Int, arg_2 : String) : Int, String 
    return arg_1, arg_2 
end 
에서

???

감사합니다!

답변

3

크리스탈 메서드는 하나의 값만 반환 할 수 있습니다. "다중 값을 반환하는"방법은 튜플을 반환 한 다음 원한다면 즉시 호출 사이트에서 언팩 한 것처럼 압축을 푸는 것입니다. 당신이 반환 유형을 지정하려면

당신은 할 수 있습니다 :

def my_method(arg_1 : Int, arg_2 : String) : {Int32, String} 
    return arg_1, arg_2 
end 

또는 (같은, 또 다른 구문) :

def my_method(arg_1 : Int, arg_2 : String) : Tuple(Int32, String) 
    return arg_1, arg_2 
end 

당신은 여러 반환하는 짧은 구문을 사용할 수 있습니다 값 : return 1, 2 하이다

def my_method(arg_1 : Int, arg_2 : String) 
    {arg_1, arg_2} 
end 

내부적 retur와 동일 튜플을 ning하는 것 {1, 2}.

결국이 함수가 실제로 어떻게 구현되는지는 중요하지 않습니다. Go 함수는 실제로 두 값을 반환하지 않지만 포인터 또는 그와 비슷한 것을 전달한 다음 어셈블리에서도 함수가없는 경우도 있습니다. 그래서 당신이 여러 가지를 반환 할 수 있다면 어떻게 든 상관없이 한번에 모든 것을 얻을 수 있다면 중요합니다.

관련 문제