2017-04-22 11 views
4

F#:ダブルバックティック値の名前が機能名と衝突しますか? Visual Studioの2015年に

let myFunction (``string`` : string) = 
    "\"Quoted string\"" |> (Regex "\"[^\"]*\"").Match |> string 

let myOtherFunction (str : string) = 
    "\"Quoted string\"" |> (Regex "\"[^\"]*\"").Match |> string 

最初の関数はコンパイラエラーを生成し、string機能は赤で下線が引かれています。 ( "この式はMatch型 - > 'aが必要ですが、ここに型文字列があります)

第2の関数は問題ありません。

これは仕様です。

答えて

5

理由は、パラメータと最後の呼び出しが同じことです。二重backticksは名前をエスケープするために使用されます彼らは名前の一部ではありません。

したがって、``string``stringがまったく同じことを意味する場合は、文字列パラメータにパイプ処理しようとしています。そして、はい、これは完全に設計によるものです。

C#に相当するものは、エスケープされた名前です。たとえば、@hellohelloは衝突します。

+1

実際、ここではダブルバッククォートは全く必要ありません。あなたは 'let upper(string:string)= string.ToUpper()'と書くことができました。 'upper" foo "'は結果 "FOO"を生成します。ダブルバッククォートが必要なのは、 'type'のようなキーワードの名前でパラメータを指定したい場合や、名前にスペースやその他の通常不正な句読点を含めたい場合です。 – rmunn

関連する問題