我正在學習Michael Pilquist的優秀國家monad講座here。我有兩個問題,54分鐘卡住了。Scala國家monad中的理解
如果是
Option[FollowerStats]
,什麼是?
操作?我 找不到選項三元運營商在斯卡拉2.10.2如何進行尾發電機把更新的緩存(包括漫無遞增)回checkCache方法的
State
結果?返回State
似乎被丟棄,對於理解似乎只得到了Option[FollowerStats]
。
def checkCache(u: String): State[Cache, Option[FollowerState]] = for {
c <- State.get[Cache]
ofs <- State.state {
c.get(u).collect {
case Timestamped(fs, ts) if !state(ts) => fs
}
}
_ <- State.put(ofs ? c.recordHit | c.recordMiss)
} yield ofs
試圖理解我試圖重新編寫理解,但它沒有幫助。
State.get[Cache].flatMap{ c =>
State.state{c.get(u).collect(...)}.flatMap{ ofs =>
State.put(ofs ? c.recordHit | c.recordMiss).map{ _ =>
ofs
}
}
}
更新: 我想我已經掌握了關鍵點2個多虧了答案。我沒有意識到收益率實際上是這樣說的:從put
中取出最後一個狀態s => (s,())
,並用值替換Unit
值類型,得到s =>(s,ofs)
。我猜想關鍵在於意識到產量不是字面上的返回,而是將其翻譯爲State.map。
更新 瞭解現在的選項位。我想這個演示文稿仍然使用斯卡拉斯的含義,儘管它是派生出單態的。
'Option? ... | ...'位來自隱式轉換(特別是隱式類「OptionOps」)。您可能已經處理了隱式轉換,例如由於隱式轉換爲StringOps而能夠在字符串上調用'toInt' - 這與之大致相同。 – Shadowlands
在1:06:12他實際上提到了選項。應該繼續觀看,但強迫症阻止了它。 – Pengin
希望下一個OCD患者能夠看到這個VID會發現這個問題,閱讀所有的評論,並知道直接跳回來觀看其他的VID! :) – Shadowlands