關鍵字參數

badge

h(f) = f(y: 1, x: 2)
h: |T: type|((y: Int, x: Int) -> T) -> T

帶有關鍵字參數的函數的子類型化規則如下

((x: T, y: U) -> V) <: ((T, U) -> V) # x, y 為任意關鍵字參數
((y: U, x: T) -> V) <: ((x: T, y: U) -> V)
((x: T, y: U) -> V) <: ((y: U, x: T) -> V)

這意味著可以刪除或替換關鍵字參數 但是你不能同時做這兩件事 也就是說,您不能將 (x: T, y: U) -> V 轉換為 (U, T) -> V 請注意,關鍵字參數僅附加到頂級元組,而不附加到數組或嵌套元組

Valid: [T, U] -> V
Invalid: [x: T, y: U] -> V
Valid: (x: T, ys: (U,)) -> V
Invalid: (x: T, ys: (y: U,)) -> V