コンパイル時に をチェックするだけでなく、呼び出し側の式もコンパイルするように、式のパラメータを定義できます。チェックコードコンパイル時の見積もり構造
type A = {
a : int
}
type Checker() =
static member Check(e : Expr<int>) : ResultType = ...
PropertyGet(..., PropertyGet (....), a)
に似た実際の発現をもたらす
let a = { a = 1 }
Checker.Check <@ a.a @>
チェック入力し、明らかに次のよう
は、例を見ることができます。
そして今、いくつかの他の方法
let getInt (a:A) : int = a.a
以下も
Checker.Check <@ getInt a @>
をコンパイルしかし、どのように私は2番目の例では、コンパイルされることを防止しPropertyGet
秒間のみを許可することができますか? (例として)。
私は実行時に式の構造を調べることができますが、私はコンパイル時間のチェックをしたいと思います。
できません。これが重要な要件である場合は、引用符の代わりにコンビネータのライブラリを使用することをお勧めします。 –
どのように役立つでしょうか? – robkuz
コンビネータ(または生成するデータ型)が無効なデータの作成を許可しないようにすることができます。あなたが知っている、 "無効なデータを説明できないようにする"とそのすべて。 –