在Power查询(M)中,我找到了两种声明类型的方法: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语法。
为什么不呢?
另外,在M中声明类型会对性能产生任何影响,还是仅仅是在传递/返回错误类型时引发错误?
发布于 2016-11-11 20:59:39
在"M“中声明类型通常对性能的影响很小,并且会使您的功能更”自文档化“。
在调用函数时,将检查函数参数类型“种类”,而不是自定义的完整类型定义。因此,将数字列表传递给期望文本列表的函数不会导致任何错误。你可以看到一些"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 }。我认为这个限制的目的是引导函数作者不要将不受函数尊重的类型限制。
您可以阅读更多关于语法允许在语言规范中的内容。(如果该链接死了,您应该能够跟踪MDSN的PDF链接。)
https://stackoverflow.com/questions/40544201
复制相似问题