このシナリオを単純化します (これは Perfect Developer にあり、すぐに複雑になります)。クラスに という単純なスキーマがあるとします。これは、(以前に定義されたクラス) をパラメーターとしてSucceed
受け取ります。Course
基本的に、コースが前提条件として自分のコースにあることを確認してから、事後条件のセットにset
追加します。coursesCompleted
この単純なスキーマはうまく機能し、次のようになります。
schema !Succeed(c:Course)
pre
c in allCourses
post
coursesCompleted! = coursesCompleted.append(c);
ただし、非常に単純なif
条件を追加したいと思います。自分の courseCompleted カーディナリティが 30 以上の場合、Diplomation
列挙型を " Ok
" に設定します。カーディナリティが 30 未満の場合は、" NotOk
"に設定します
Perfect Developer のドキュメント、および私が見たすべてのまれな例によると、if
構文は次のようになります。
if [condition1] : do stuff;
[condition2] : do other stuff;
fi
ただし、スキーマに直接プラグインすると、次のようになります。
schema !Succeed(c:Course)
pre
c in allCourses
post
coursesCompleted! = coursesCompleted.append(c),
if [#coursesCompleted >= 30] : diplomation = Ok@DiplomationEnum;
[#coursesCompleted < 30] : diplomation = NotOk@DiplomationEnum;
fi
それは機能しません、私はいつも「非常に説明的」になります
エラー!キーワード 'if' に構文エラーがあります。次のいずれかが必要です: '!' '(''?''c_address_of'
;
どこにでも追加したり、 の後via
にキーワードを追加したり、post
位置を変更したり、 と を交換したり;
、,
その他多くの試行錯誤を試みました。
私の質問は次のとおりです: if
Perfect Developer で、スキーマの事後条件に条件を追加するにはどうすればよいですか?
Perfect Developerでお答えください。私は(悲しいことに)自分の正式な方法を知っています。必要なのif
は、世界で最悪のツールでコンパイルすることだけです。