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"}
但是我可以像Go-lang
def my_method(arg_1 : Int, arg_2 : String) : Int, String
return arg_1, arg_2
end
???
谢谢!
答案 0 :(得分:4)
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
在内部与返回元组{1, 2}
相同。
最后,如何实现它并不重要,也许在Go中,函数不会真正返回两个值但是传递指针或类似的东西,然后在汇编中甚至没有函数,所以重要的是,如果你可以返回多个东西,然后以某种方式将它们全部收集起来。