2012-03-06 42 views
1

接受的答案爲「How to convert a Some(「 」) to None in one-line?」所採取的形式:當它不是一個時,Option如何作爲一個集合?

def convert(x: Option[String]) : Option[String] = 
    x.map(_.trim()).filterNot(_.isEmpty()) 

我的問題是,我無法弄清楚如何通過什麼方式由filterNot返回的集合被轉換成一個選項找到。我查看了Scaladoc的Option構造函數,Option對象,Predef,Seq和Seq對象。我認爲這可能是一個隱含的地方,但是如何找到它呢?

+2

它不像一個集合,它就像一個monad。就像收藏一樣。 – 2012-03-06 16:33:27

+0

@LuigiPlinge:foreach和迭代器的東西是一個集合,至少通過_my_ duck test - 這些方法不是monads的內在屬性,它們是?你用什麼方式說它不是一個集合 - 或者你不是? – 2012-03-06 18:18:31

+1

在這個例子中,你說它就像一個集合,因爲它有'map'和'filter'方法。但是這些是monad操作(和'flatMap'一起)。當然,你可以將Options看作集合(甚至可以隱式轉換爲'List'),但對於這個問題並不重要。這就像說'Option'就像'Foo',因爲它們都有'toString'方法。 – 2012-03-06 21:43:33

回答

2

在scaladoc中,您可以單擊「通過繼承」排序按鈕(它出現在方法描述的正上方)。這應該可以幫助您找到給定方法的具體實現。跳轉到該類並查看源代碼(到源的鏈接將顯示在類/特徵/對象描述中)。

在選項的情況下,也有叫mapfilter方法等

當需要一個隱含的價值,你會發現,無論是一個implicit子句中的參數列表,或綁定像[A: MyImplicit]上下文在參數中。隱式通常是在伴隨對象中導入或聲明的。

如果您有更具體的問題/示例,請告訴我。

+0

啊!對不起,我終於明白了。我認爲如果Option本身就是一個集合,它就會有一些指示特徵或繼承 - 一旦我看到它只是一個產品,我甚至不看它自己的成員,因爲我「知道」那個'map',等人不會在那裏。 – 2012-03-06 14:50:39

+0

給定方法的具體實現總是在其描述之下給出。 – 2012-03-06 16:56:02

+0

@ DanielC.Sobral你的意思是定義類嗎? – paradigmatic 2012-03-06 17:02:25

相關問題