2016-11-19 78 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"} 

,但我可以做somethink像Go-lang

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

???

謝謝!

回答

3

Crystal方法只能返回一個值。 「返回多個值」的方法是返回一個元組,然後,如果需要的話,立即在呼叫站點解壓它,就像你做的那樣。

如果要指定返回類型,你可以這樣做:

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在內部與返回相同ning元組{1, 2}。最後,它是如何實現的並不重要,也許在Go函數並不真正返回兩個值,而是傳遞指針或類似的東西,然後在彙編中甚至沒有函數,所以如果你可以返回多個事物,然後以某種方式一次得到它們,那麼重要的是什麼。