我有一個表示DB記錄的字符串ID列表。我想從數據庫異步加載它們,然後將每條記錄異步上傳到遠程服務器,然後當所有數據完成上傳時,記錄上傳的記錄的ID。Scala中的TraversableOnce,Future和Option用於理解
由於我在Scala 2.9.2上,我正在使用Twitter的core-util Future實現,但它應該像Monadic轉換中的2.10期貨一樣工作。
的總體思路是這樣的:
def fetch(id: String): Future[Option[Record]]
def upload(record: Record): Future[String]
def notifyUploaded(ids: Seq[String]): Unit
val ids: Seq[String] = ....
我試圖通過對修真但獲取收益期權的未來使得它晦澀的代碼不編譯其實要做到這一點:
for {
id <- ids
maybeRecord <- fetch(id)
record <- maybeRecord
uploadedId <- upload(record)
} yield uploadedId
編譯這將導致以下錯誤:
scala: type mismatch;
found : com.twitter.util.Future[String]
required: Option[?]
uploadedId <- upload(record)
^
我是什麼MI ssing?爲什麼編譯器期望uploadedId是一個Option?有沒有什麼方法可以解決這個問題?
[類型不匹配的Scala上對於理解]的可能重複(http://stackoverflow.com/questions/4719592/type-mismatch-on-scala-for-comprehension) – 2013-03-01 09:21:16
單子是在一個Monoid ** Endo **的類別 - 函子。只是說' – folone 2013-03-01 09:34:27
@folone:我擔心不是每個人都會得到[笑話](http://stackoverflow.com/questions/3870088/a-monad-is-just-a-monoid-in-the-category-of -endofunctors-什麼最問題)。只是說' – 2013-03-01 10:06:01