1

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}orのような、より複雑な型に対して期待どおりに機能しません。{number}これらの型はtype構文で使用できますが、構文では使用できませんas type

なぜだめですか?

また、M で型を宣言するとパフォーマンスに影響がありますか?それとも、間違った型が渡された/返された場合にエラーが発生するだけですか?

4

1 に答える 1

2

「M」で型を宣言すると、通常、パフォーマンスへの影響はほとんどなく、関数がより「自己文書化」されます。

関数が呼び出されると、カスタムの完全な型定義ではなく、関数の引数の型「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 listas { text }

構文で許可される内容については、言語仕様で詳しく読むことができます。(そのリンクが切れた場合は、 MDSNから PDF リンクをたどることができるはずです。)

于 2016-11-11T20:59:39.687 に答える