4

http://deditwith.netを見ると、F# では、パラメーターを必要とする関数にパラメーターを渡す必要が厳密にあるわけではないことがわかります言語は、結果と出力パラメーターをタプルに自動的に詰め込みます。(!)

これは、言語の一般的なメカニズムの何らかの副作用 (語呂合わせを許してください) ですか、それとも F# 仕様で明確に表現され、故意に言語にプログラムされた機能ですか?

これは素晴らしい機能であり、もしそれが明示的に F# に組み込まれているとしたら、言語内にこのような他の金塊が潜んでいるのではないかと考えています。なぜなら、私は何十もの Web ページに目を通し、3 冊の本 (by D) を読んだからです。 . Syme、T. Petricek、および C. Smith) と私は、この特定のトリックが言及されているのを見たことがありませんでした。

編集: Petricek 氏が回答したように、以下では、彼の著書Real-World Functional Programmingの少なくとも 2 か所でこの機能について言及しています。私の悪い。

4

2 に答える 2

5

これは、F# 言語の他のより一般的なメカニズムの副作用ではありません。

これは、この目的のために特別に追加されました。.NET ライブラリは、多くの場合、メソッド シグネチャの末尾にout(または) パラメーターを追加することで、複数の値を返します。refF# では、複数の値を返すことはタプルを返すことによって行われるため、.NET スタイルを典型的な F# パターンに変えることは理にかなっています。

特に相互運用性に関しては、F# が多くの同様のトリックを行うとは思いませんが、便利なスニペットのいくつかをここここで参照できます。

(すぐに確認したところ、Real-World Functional Programming の 88 ページと 111 ページでこのトリックについて簡単に説明されています。)

于 2012-11-27T19:48:00.550 に答える
3

これは、.NET メソッドとの相互運用をより快適にするための特定の機能です。代わりに、末尾のすべてのパラメーターを戻り値の一部として扱うことができます (ただし、これは末尾のパラメーターにのみ影響することに注意してくださいvoid f(out int i, int j)。このように呼ばれることはありません)。

いずれにしても、out パラメーターは、.NET 1.0 でタプルが不足していることを回避するための手段にすぎません。それらを使用する多くのメソッドは、(Nullable<_>型またはタプルを戻り値の型として使用することによって) フレームワークの新しいバージョンを対象とする場合、別の方法で記述される可能性があります。

于 2012-11-27T19:46:37.103 に答える