Crystal 方法返回多个值

Ole*_*huk 3 crystal-lang

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")
Run Code Online (Sandbox Code Playgroud)

但如果我这样做,它也有效:

result = my_method(1, "1") #=> {1,"2"}
Run Code Online (Sandbox Code Playgroud)

但我可以做一些像在 Go-lang

def my_method(arg_1 : Int, arg_2 : String) : Int, String
  return arg_1, arg_2
end
Run Code Online (Sandbox Code Playgroud)

???

谢谢!

ast*_*ite 6

Crystal 方法只能返回一个值。“返回多个值”的方法是返回一个元组,然后,如果需要,立即在调用站点解压缩它,就像您所做的那样。

如果要指定返回类型,可以执行以下操作:

def my_method(arg_1 : Int, arg_2 : String) : {Int32, String}
  return arg_1, arg_2
end
Run Code Online (Sandbox Code Playgroud)

或者(相同,只是另一种语法):

def my_method(arg_1 : Int, arg_2 : String) : Tuple(Int32, String)
  return arg_1, arg_2
end
Run Code Online (Sandbox Code Playgroud)

您还可以使用较短的语法来返回多个值:

def my_method(arg_1 : Int, arg_2 : String)
  {arg_1, arg_2}
end
Run Code Online (Sandbox Code Playgroud)

也就是说,执行return 1, 2在内部与返回 tuple 相同{1, 2}

最后,它是如何实现的并不重要,也许在 Go 中,函数并没有真正返回两个值,而是传递指针或类似的东西,然后在汇编中甚至没有函数,所以重要的是你可以返回多个东西,然后以某种方式一次性获取它们。