F# 4.1からCallerLineNumber, CallerFileName, CallerMemberNameが機能するようになる話

この記事はF# Advent Calendar 2016の7日目の穴埋め用記事です。

qiita.com

今回は標題にあげたCallerLineNumber, CallerFileName, CallerMemberNameの話。

https://github.com/fsharp/fslang-design/blob/8ee13305a7ac559a4c0396681e9501120bbb567e/FSharp-4.1/FS-1012-caller-info-attributes.md

C# 5.0から導入されたCaller Information機能がF# 4.1から使えるようになります。

  • 省略可能なパラメータに属性を付ける
    • デフォルト値を定義したいならdefaultArg関数を使いましょう
  • 関数は対象外
    • Optional Parametersはメソッドにしか定義できないので仕方ない

何が嬉しいかって、これのためだけにFSharp.Compiler.Serviceに依存しなくても良くなることですね。

個人的な利用用途の一つにPersimmonでの情報量増加があります。 assertionに失敗した時にファイル名、行番号が簡単にだせるので嬉しいですね*1

*1:F# 4.1しか表示できない問題は残る