使用 Proc 接受包含联合的元组
Using a Proc accepting a Tuple containing unions
当尝试使用包含联合类型作为参数的 Proc
和 Tuple
时:
proc = ->(t : Tuple(Float64|Int32, Float64|Int32)){ t[0] + t[1] }
proc.call({1, 3})
我收到这个错误:
type must be Tuple(Float64 | Int32, Float64 | Int32), not Tuple(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))
当尝试使用包含联合类型作为参数的 Proc
和 Tuple
时:
proc = ->(t : Tuple(Float64|Int32, Float64|Int32)){ t[0] + t[1] }
proc.call({1, 3})
我收到这个错误:
type must be Tuple(Float64 | Int32, Float64 | Int32), not Tuple(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))