読者です 読者をやめる 読者になる 読者になる

判別共用体のUnionCaseにAttributeを付与する

F#

必要に迫られたので調べた。

open System

// AttributeTargets.Property以外はエラー
[<AttributeUsage(AttributeTargets.Property, Inherited = false); Sealed>]
type TestAttribute() =
  inherit Attribute()

// fieldがない場合:
//   AクラスのB getプロパティにつく
type A =
  | [<Test>] B

// fieldがない場合:
//   CクラスのNewDメソッドにつく
type C =
  | [<Test>] D of int

struct unionの場合も特に違いはなし。

AttributeTargets.Propertyなのにメソッドかよーみたいな気持ちはありつつ、でもまぁそこしかないかみたいな。