第2章新版Manning書籍「Scala in Depth」作者Josh Sueresh發佈了here。在閱讀文章中,我跨越該位的代碼來:被「Scala深度」迷惑選項示例
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中的值是否符合某些謂詞,如果不符合,則將 轉換爲None。最後,我們檢查我們是否有 選項中的值;否則,我們返回默認的臨時目錄。
因此,對於我來自Java和學習Scala的代碼語法而言,我感到困惑。我不明白地圖(...)函數調用後是否有點。看起來有太多的類型推斷髮生,我錯過了某個地方的東西,沒有看到類型。
對於我來說,學習Scala能夠以某種方式看到所有推斷的類型,以便不拖延(或不應用)所有的減少,即看起來像Java之前的冗長版本6類型必須在收集類的平等的兩邊進行解釋。
是否有任何地方需要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 2012-03-19 20:40:21
在此級別,您將受益於更多Odersky等人在Scala中編程而不是從Suereth的Scala中深入研究。只是說。 – 2012-03-20 05:29:42
[這篇文章](http://skipoleschris.blogspot.co.uk/2012/03/map-flatten-and-flatmap.html)和漂亮的動畫可能會給你更多的認識 – 2012-03-20 10:02:56