F#では、式に適用するのカスタム属性を作成するにはどうすればよいですか?私はどこからでもリソースを探しましたが、何も見つかりませんでした。F#式にカスタム属性を作成する
例 属性[<Entrypoint>]
は一部の式に適用できるため、コンパイラは式のタイプがarray string -> int
であることを推測できます。
simillaryを使用するカスタム属性を作成する方法を教えてください。カスタム属性を作成するには
F#では、式に適用するのカスタム属性を作成するにはどうすればよいですか?私はどこからでもリソースを探しましたが、何も見つかりませんでした。F#式にカスタム属性を作成する
例 属性[<Entrypoint>]
は一部の式に適用できるため、コンパイラは式のタイプがarray string -> int
であることを推測できます。
simillaryを使用するカスタム属性を作成する方法を教えてください。カスタム属性を作成するには
は、単にSystem.Attribute
から継承したクラスを宣言:あなたが見ることができるようにコード単位に属性を適用するとき
type MyAttribute() = inherit System.Attribute()
[<My>]
let f x = x+1
を、接尾辞「属性」を省略することができます。
type MyAttribute(x: string) =
inherit System.Attribute()
member val Y: int = 0 with get, set
[<My("abc", Y=42)>]
let f x = x+1
実行時には、あなたがそれらに適用される属性を参照する型、メソッド、およびその他のコード単位を検査することができ、そのデータを取得するために:
を必要に応じて、あなたの属性パラメータや特性を与えることができます[<My("abc", Y=42)>]
type SomeType = A of string
for a in typeof<SomeType>.GetCustomAttributes(typeof<MyAttribute>, true) do
let my = a :?> MyAttribute
printfn "My.Y=%d" my.Y
// Output:
> My.Y=42
Here is a tutorialより詳細にカスタム属性を説明します。
ただし、カスタム属性を使用してコンパイル時の動作を強制することはできません。 EntryPointAttribute
は特別なです。つまり、F#コンパイラはその存在を知り、特別な扱いをしています。 F#には他にもいくつかの特殊属性があります。たとえば、NoComparisonAttribute
,などですが、自分で作成した属性に特別な処理を加えるようにコンパイラに指示することはできません。
大きな目標(達成しようとしている目標)を記述すると、より良い解決策を見つけることができます。
コンパイラが属性から推論することが可能かどうかは、大きな目標はありませんでした。しかし、私は特別な属性があったことを知らなかった、ありがとう! –