プロパティ名に関する構文の検証を正確に実行するために、プロパティ名がリテラルでなく関数の結果であるまれな場合には、プロパティ名を必要とする関数が部分的に評価されます。
次の例を確認してください。
式PropValue(Concat(Core.Abbrev))
は有効ですが、プロパティ名を検証するにはConcat
関数の評価が必要です(構文の検証のみではなく)。
式PropValue(If(NodeIsLeaf(),Core.Abbrev,Custom.Label))
は有効ですが、プロパティ名を検証するにはIf関数の評価が必要です。
問題のプロパティ名が式の一部でしかない場合、プロパティ名の決定に必要な部分のみが評価されます。たとえば、式Add(PropValue(Concat(Core.,I,D)),If(NodeIsLeaf(),0,1)
の場合、構文検証のために評価される式の部分はConcat
関数とそのパラメータのみです。
このような式の一部が評価されるという事実は、PropValue(PropValue(NodeType))
などの場合に重要です。この式では、Custom.NodeTypeプロパティに値を指定しないかぎり構文検証は失敗します。