【问题标题】:Crystal method return multiple valuesCrystal方法返回多个值
【发布时间】:2016-11-19 15:05:20
【问题描述】:

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

???

谢谢!

【问题讨论】:

    标签: crystal-lang


    【解决方案1】:

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

    【讨论】:

      猜你喜欢
      • 2017-08-30
      • 2013-02-12
      • 2012-01-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-04-30
      • 1970-01-01
      相关资源
      最近更新 更多