Power Query 类型定义
Power Query Type Definition
在 Power Query (M) 中,我找到了 2 种声明类型的方法:myVar as type
或 type text
每个似乎都适用于不同的上下文。例如:
Table.AddColumn(myTable, "NewName", each [aColumn], type text)
或
MyFunc = (aParam as any) as date => Date.From(aParam)
但是,这对于更复杂的类型(例如 {text}
或 {number}
)不起作用,因为它们将是仅包含文本值或仅包含数字的列表。我可以通过 type
语法使用这些类型,但不能使用 as type
语法。
Why/not?
此外,在 M 中声明类型是否会影响性能,或者如果类型不正确 passed/returned 是否只是引发错误?
在 "M" 中声明类型通常对性能影响很小,并且会使您的函数更多 "self-documenting"。
调用函数时,会检查函数参数类型 "kind",而不是自定义的完整类型定义。因此,将数字列表传递给需要文本列表的函数不会导致任何错误。你可以看到一些 "M":
let
FunctionType = type function (l as { text }) as any,
UntypedFunction = (l) => l{0},
TypedFunction = Value.ReplaceType(UntypedFunction, FunctionType),
Invoked = TypedFunction({0, 1, 2})
in
Invoked
不检查递归类型有利于提高性能,因为检查列表的每个元素都需要遍历整个列表。
当您编写像 (l) => l{0}
这样的函数值时,您只能使用像 as list
而不是 as { text }
这样的原始类型。我认为此限制旨在指导函数作者不要设置函数不会遵守的类型限制。
您可以在 Language Specification. (If that link dies you should be able to follow the PDF link from MDSN 中阅读更多关于语法允许的内容。)
在 Power Query (M) 中,我找到了 2 种声明类型的方法:myVar as type
或 type text
每个似乎都适用于不同的上下文。例如:
Table.AddColumn(myTable, "NewName", each [aColumn], type text)
或
MyFunc = (aParam as any) as date => Date.From(aParam)
但是,这对于更复杂的类型(例如 {text}
或 {number}
)不起作用,因为它们将是仅包含文本值或仅包含数字的列表。我可以通过 type
语法使用这些类型,但不能使用 as type
语法。
Why/not?
此外,在 M 中声明类型是否会影响性能,或者如果类型不正确 passed/returned 是否只是引发错误?
在 "M" 中声明类型通常对性能影响很小,并且会使您的函数更多 "self-documenting"。
调用函数时,会检查函数参数类型 "kind",而不是自定义的完整类型定义。因此,将数字列表传递给需要文本列表的函数不会导致任何错误。你可以看到一些 "M":
let
FunctionType = type function (l as { text }) as any,
UntypedFunction = (l) => l{0},
TypedFunction = Value.ReplaceType(UntypedFunction, FunctionType),
Invoked = TypedFunction({0, 1, 2})
in
Invoked
不检查递归类型有利于提高性能,因为检查列表的每个元素都需要遍历整个列表。
当您编写像 (l) => l{0}
这样的函数值时,您只能使用像 as list
而不是 as { text }
这样的原始类型。我认为此限制旨在指导函数作者不要设置函数不会遵守的类型限制。
您可以在 Language Specification. (If that link dies you should be able to follow the PDF link from MDSN 中阅读更多关于语法允许的内容。)