Crystal方法返回多个值

问题描述:

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 

???

谢谢!

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函数并不真正返回两个值,而是传递指针或类似的东西,然后在汇编中甚至没有函数,所以如果你可以返回多个事物,然后以某种方式一次得到它们,那么重要的是什么。