質問
現在の読みシリーズのblogposts F#の対象とC#のプログラマを交換してください。現在私は読み終えた第3部( http://www.jelovic.com/weblog/?p=220 )、左に戸惑.
の違い
ましょうreadLine=。ReadLine()
や
ましょうreadLine()=ソフトである。ReadLine()
でもそれなのになぜあの必要性を指定し、両ブレース-()をインストール:
うオリジナルプリント(テキスト:string)()=ソフトである。WriteLineテキスト
なにコンパイラで行だけを宣言する委譲印刷を省略しブレース、ストとの同時購入で今ならし
うオリジナルプリント(テキスト:文字列)=ソフトである。WriteLineテキスト
また、以下のような線を作る意味がほとんどないためいて
通常時の機能を有しているパラメータの異なるタイプのコンパイラでの差別化機能を呼び委譲が基準のためのユニットで力します。
この場合のパラメータが異なるのでは安全のためのコンパイラはこの機能電話のかけ方は?
ご回答で明確になった。としての見積もりをさせます。
解決
導入。 のように役立つ最初の議論の違いを簡単な例ですがどのようなものかユニット"値です。最初の宣言を作成し、文字列値(直通話 ReadLine
を得るのから入力したユーザ):
> let readLine = Console.ReadLine ();;
val readLine : string
第二の宣言を作成し機能する単位としての価値を引数に使います。この機能は必要ありませんも本当に入力していきたいとして定着する機能で繰り返し実行される(することが可能 サイド効果 -読み込んでから入力したユーザ)。
の"ユニット"パラメータにそのような成機能を取るものとして引数に指定する。"ユニット"は単一の値を記述して ()
, でな情報だけであるが、一部のパラメータ:
> let readLine () = Console.ReadLine ();;
val readLine : unit -> string
ご質問です。 くえを追加ブレース.この機能する文字列の最初のパラメータとして、追加の"ユニット"としての価値のパラメータとします。できることから、タイプシグニチャー:
> let print (text : string) () = Console.WriteLine text
val print : string -> unit -> unit
この有効F#宣言では役に立ちません。この機能のみとなりますという場合には、その一部に文字列を印刷また、ご利用になる運賃に応じて追加ユニット"。ることができようになります:
print "Hello" ()
なくても、追加の"ユニット"パラメータ、機能と価値)の追加、追加のパラメータによるものでないことをまず作成できるような機能を呼び出すことにより印刷異なる文字列).
ある場合にこの宣言できるおもしろい。例えば、話ができる機能だけでは、文字列としてのパラメータとします。この場合、また機能しています。返された機能を取りユニット、文字列:
let f = print "Hello" // doesn't print anything
f () // prints "Hello"
f () // prints "Hello" again!
なので、コンパイラで利用できる"単位"としての価値その他の価されたものの翻訳であります。ここの見た目は馴染みのない(お役に立ちません)ができる良い意味での一部のシナリオに対する
他のヒント
この:
let print (text : string) = Console.WriteLine text
作成手法の印刷のように:
print "hi" // prints "hi" in the console
場所:
let print (text : string) () = Console.WriteLine text
の生産方法を印刷するには特定の文字列のように:
let printHi = print "hi" // Does NOT print a string to the console
printHi () // But now this does print "hi" :)
printHi () // And this...
なので基本的には"プリントの特定の文字列Xにコンソール機能の工場"の結果を(例printHi)再利用できます。
使用currying,
let makePrinter (text : string) () = Console.WriteLine text
ましょうを作成する機能を常に表示一部の文字列は、インスタンス
let helloPrinter = makePrinter "hello"
"を与えるこんにちは"だけで呼び出し
helloPrinter ()
一方で、
let print (text : string) = Console.WriteLine text
immediatly出力テキストが呼び出された場合
print "hello"
を返します()ではなく、機能タイプ unit -> unit
としての画廊。