使用Proc接受包含联合的元组

时间:2018-04-06 14:13:01

标签: crystal-lang

尝试使用包含Proc联合类型的Tuple作为参数时:

proc = ->(t : Tuple(Float64|Int32, Float64|Int32)){ t[0] + t[1] }
proc.call({1, 3})

我收到此错误:

  

type必须是Tuple(Float64 | Int32,Float64 | Int32),而不是Tuple(Int32,Int32)

那个类型已经是元组{1,3}吗?如果没有,我怎么能传递那种类型的元组? 或者使用Proc时不支持包含联合类型的元组?

1 个答案:

答案 0 :(得分:3)

不幸的是,你现在必须明确地施展它:

alias Point = {Float64|Int32, Float64|Int32}
proc = ->(t : Point){ t[0] + t[1] }
proc.call({1, 3}.as(Point))

你可以用别名整理一下:

record Point, x : Float64|Int32, y : Float64|Int32
proc = ->(t : Point){ t.x + t.y }
proc.call(Point.new(1, 3))

或者甚至可以创建专用值类型:

{{1}}