首页 文章

Crystal方法返回多个值

提问于
浏览
2

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

???

谢谢!

1 回答

  • 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中,函数不会真正返回两个值,而是传递指针或类似的东西,然后在汇编中甚至没有函数,所以重要的是你可以返回多个东西然后以某种方式一次性获取它们 .

相关问题