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 (+)
のようにすれば "+"
が返されます。
面白いですね。