Josh Suereshの新しいマニングの本「Scala in Depth」の第2章はhereです。記事を読んで、私はこのコードのビットに出くわした:"Scala in Depth"で混乱しています。オプションの例
def getTemporaryDirectory(tmpArg : Option[String]) : java.io.File = {
tmpArg.map(name => new java.io.File(name)).
filter(_.isDirectory).
getOrElse(new java.io.File(System.getProperty("java.io.tmpdir")))
}
上記のコードを説明するフォローアップテキストが読み:
getTemporaryDirectory方法は として含有するオプションをコマンドラインパラメータを取ります文字列を返し、使用する一時ディレクトリの を参照するFileオブジェクトを返します。まず、 パラメータがある場合、java.io.Fileを作成するOptionのmapメソッドを として使用します。次に、この新しく作成されたファイルオブジェクト がディレクトリであることを確認します。これを行うには、フィルターメソッドを使用します。これは、Optionの値がある述語に従うかどうかをチェックし、そうでなければ がNoneに変換されるかどうかを確認します。 最後に、 オプションに値があるかどうかを確認します。それ以外の場合は、デフォルトの一時ディレクトリが返されます。
私はJavaから来て、Scalaを学ぶために、コードの構文が私を混乱させます。マップ(...)関数呼び出しの後にドットがどのようにあるのかわかりません。タイプ推論があまりにも多いようですが、どこかで何かが見つからず、タイプが見えません。
スケーラを学んで、すべての推測タイプを見て、すべての削減を取り除く(または適用を解除する)ことができたら、非常に助かります。つまり、Java以前のバージョン6コレクションクラスのequalsの両側で型を明示する必要がありました。
Scalaのコードスニペットをとり、明示的に異なるものを作成するツールがあります(フラグ、タイプ、インプリシット、ブレース、セミコロン)。私は完全に簡潔なコードからJavaに近いものまで私を歩かせるだけのものが必要なので、もっと簡潔なScalaを読んで(そして最終的には書く)自分のスキルを身につけることができると感じることができます。私は、特に上記にこだわってないです
def getTemporaryDirectory(tmpArg : Option[String]) : java.io.File = {
ContainerType1[Type1] t1 = tmpArg.map(name => new java.io.File(name));
ContainerType2[Type2] t2 = t1.filter(_.isDirectory);
return t2.getOrElse(new java.io.File(System.getProperty("java.io.tmpdir")));
}
:ここ
は、私が探しています何のようなものです。私はちょうど型推論のために何が起こっているのかという点で連鎖関数呼び出しがどのように機能するかを追うことができません。これに関する助けがあれば大いに感謝します。
この記事では、上記のような問題を抱えています。http://zeroturnaround.com/blog/scala-sink-or-swim-part-1/ – chaotic3quilibrium
このレベルでは、 Oderskyらのプログラミングは、SuerethのScalaの深さよりもScalaでプログラミングされています。ただ言って。 –
[この投稿](http://skipoleschris.blogspot.co.uk/2012/03/map-flatten-and-flatmap.html)と素敵なアニメーションは、おそらくあなたにもっと感動を与えるでしょう –