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



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

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

我收到此错误:

类型必须为元组(浮点数64 |Int32, 浮点数64 |Int32(,而不是元组(Int32, Int32(

元组{1,3}不是已经属于那种类型了吗?如果没有,如何传递该类型的元组?还是使用Proc时不支持包含联合类型的元组?

不幸的是,

您现在必须显式转换它:

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

你可以用别名稍微整理一下:

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))

相关内容

  • 没有找到相关文章

最新更新