13

一部の言語では、文字列を数値に強制する(Javascriptなど)、少数の型を数値にキャストするint(ほとんどのCベースの言語など)、または演算子をオーバーロードするときに使用するなど、単項プラス演算子を暗黙の変換に使用します。

単項プラスは主にこのようなハックの目的で使用され、F#は自動拡大変換を実行しないため、F#に単項プラスが含まれていることに驚きました。

私の驚きに追加されるのは、Haskellに単項プラス演算子がないことです。F#のデザインはHaskellの影響を受けていたので、Haskellが明らかに必要としなかったのに、F#が単項プラスを必要とすると決定された理由に興味があります。

F#での単項プラスの信頼できる使用例を挙げてください。できないのなら、なぜそれが言語に含まれているのですか?

4

4 に答える 4

2

F#には2つの主要な影響があります。

  1. もともと互換性があったOCaml、そして
  2. それが構築されているCLR。

指摘されているように、OCamlには単項プラス演算子があるので、その観点から、F#にも単項演算子があるのは当然でした。

CLRに関しては...驚いたことに、共通言語仕様では、演算子のオーバーロードをサポートするための言語の要件が指定されていません。ただし、メカニズムを使用する場合は、セマンティクスと命名規則を指定します。+=それでも、C#とVBが複合代入演算子(など)のオーバーロードのサポートをオプトアウトしたように、F#は単項プラスの使用をオプトアウトすることができました。

F#(C#、VB、C ++ / CLI)以外の最も一般的な.NET言語はそれを許可し、単項プラスを持っています。したがって、この観点からも、F#が単項プラス演算子をサポートするのは自然なことです。

于 2011-11-03T23:09:35.237 に答える
2

拡張コメントを要約します。考えられる理由 (より信頼できる回答が得られるまで):

  1. F# の派生元である OCaml との一貫性(何か間違ったことや不必要なことをしている場合は、人々が何を期待すべきかを理解できるように、それを続けるのが最善です :-))
  2. オーバーロード (主にカスタム型)
  3. 単項否定による対称性
于 2011-11-03T17:08:13.670 に答える
0

これによると、「単項プラス演算子のオーバーロードを宣言するために使用されます。」

于 2011-11-03T21:33:12.113 に答える