2016-11-19 3 views
1

Crystal-langメソッドは特定の型の複数の値を返すことができますか?Crystalメソッドは複数の値を返します

私はそれがこの方法で実装することができることを知っている:

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"} 

が、私はGo-lang

def my_method(arg_1 : Int, arg_2 : String) : Int, String 
    return arg_1, arg_2 
end 
に似somethink行うことができます

???

ありがとうございます!

答えて

3

クリスタルメソッドでは1つの値しか返されません。 "複数の値を返す"方法は、タプルを返すことです。そして、望むなら、すぐにコールサイトで解凍します。

あなたはあなたがすることができる戻り値の型を指定する場合:

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 

また、複数返すように短い構文を使用することができます値:

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

return 1, 2をやっていることは、内部returと同じですタプルの始点は{1, 2}です。

最終的に、これは実際にはどのように実装されているのかは関係ありませんが、Go関数は実際には2つの値を返すのではなく、ポインタなどを渡して、だから何とか複数のものを返すことができれば、一度にすべてを得ることができれば大事です。

関連する問題