水晶方法返回多个值

4

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语言一样做些什么吗?

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

???

Thanks!

1个回答

7

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语言中,函数并没有真正返回两个值而是传递指针之类的东西,甚至在汇编语言中根本就不存在函数,因此重要的是你可以返回多个值然后以某种方式获取它们。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接