Das Flag Validator stellt spezielle Verhaltensweisen bereit.
Wenn sowohl eine Regel Rule1 als auch eine mit dem Flag Validator markierte Regel Rule1 vorhanden ist, dann stellt die Prüfung (der Validator) die Validierung und/oder Filterung der Ergebnisse von Rule1 bereit.
Die Regel mit dem Flag Validator gilt als Validator-Regel. Die andere Regel mit demselben Namen ist die Zielregel. Wenn die Zielregel referenziert wird, falls sie nicht bereits gebunden ist, wird stattdessen der Validator ausgewertet. Während der Auswertung des Validators würde dieser (in der Regel, erforderlich ist es jedoch nicht) den vorgeprüften Wert der Zielregel abrufen, ihn auf die gewünschte Art und Weise verarbeiten und das Ergebnis als Wert der Zielregel zurückgeben. Die Prüfungsregel wird nie im Cache gespeichert und nie direkt referenziert. Wenn der Name der Zielregel Rule1 lautet, wird die Prüfungsregel intern so überarbeitet, dass sie zu einer Methode mit Rule1_%%vtor wird.
Jede externe Referenz auf Rule1 erhält den Wert, der von Rule1_%%vtor zurückgegeben wird. In Rule1_%%vtor erhält jede Referenz auf Rule1 den Wert, den sie ohne einen Validator erhalten hätte (den raw-Wert). Damit kann der Ersteller der Prüfungsregel den unformatierten (raw) Wert prüfen und ändern, ersetzen oder eine auf ihm basierende Fehlermeldung erzeugen.
Die Zielregel und die Prüfungsregel müssen vom gleichen Datentyp sein. Sonst wird eine Ausnahme ausgelöst.
Zielregeln können alle normalen Regel-Flags haben, sie können jedoch keine speziellen Regeltypen sein, wie z. B. Child, Group oder Method. In Bezug auf Lookup und andere Vorgaben ist das Verhalten so, dass der Validator zuletzt ausgeführt wird, wenn alle anderen Verhaltensweisen angewendet wurden. Dadurch wird ein abgerufener Lookup-Wert validiert.
Prüfungsregeln ignorieren alle Flags außer Validator.
Vorhandene Validatoren, die über keine entsprechende Basisregel verfügen, werden nicht ausgewertet. Während der Kompilierung können Warnungen ausgegeben werden.
Prüfungsregeln dürfen keine dynamischen Regeln sein. Die Zielregel kann jedoch dynamisch sein.
Prüfungs- und Zielregeln müssen im gleichen Design (oder bei dynamischen Regeln im gleichen Bauteil) vorhanden sein. Sie suchen nicht nach Übereinstimmungen.
Betrachten Sie den folgenden Intent-Quellcode:
'! Intent Language(tm) 3.0 Design Validator : BasePart Parameter Rule Ex1 As Integer = 42 Validator Rule Ex1 As Integer If (Ex1 < 0) Then Return 0 Else If (Ex1 > 100) Then Return 100 End If Return Ex1 End Rule End Design
Unabhängig davon, welche Ganzzahl Ex1 angegeben wird, wird ein Wert zwischen 0 und 100 einschließlich zurückgegeben.
Zum Testen ist es zulässig, als Methode Ex1_%%vtor aufzurufen. Das einzige Argument wird als validiert zurückgegeben.
Es ist zur Referenz Ex1 in Validator Ex1 indirekt kreisförmig. Beispiel: Wenn Ex2 Ex1 referenziert und Ex1_validator Ex2 referenziert, wird eine Kreisreferenz erkannt. Dies ist darauf zurückzuführen, dass Ex2 auf Ex1 erst nach der Prüfung zugreifen kann. Doch die Validierung wird zum Zeitpunkt des Aufrufs ausgewertet.