nameofについて
F# Advent Calendar 2020の5日目のエントリーです。
F#5.0で導入された nameof は便利なんですが、いくつか制限があります。
まず、 nameof はファーストクラス関数ではありません。
そのため、
let f = nameofはできないx |> nameofはできない
のような制限があります。
ひとつめは出来たら面白いですが、もし実装しようとすると関数呼び出しのたびに実体が nameof かどうか見ないといけなくなりそうで、
おそらく実現されることはないでしょう。
ふたつめは例えばinline関数のみに限って緩和されるようなことはあるかもしれませんが、どうなんでしょうか。
他にも、昨日のエントリーで紹介した nameof パターンにも制限があります。
nameof は nameof symbol と nameof<'T> の2つの形式がありますが、 nameof パターンで使えるのは前者のみです。
// こうは書けない let f<'a> = function | nameof<'a> -> "yes" | _ -> "no"
おまけ
nameof はファーストクラスの関数ではないのは上で紹介した通りですが、実はシンボルではあります。
そのため、 nameof nameof は合法で、 "nameof" が返されます。
また、演算子もシンボルなので、 nameof (+) のようにすれば "+" が返されます。
面白いですね。