나는 Michael Pilquist의 우수한 상태 모나드 강의 here을 공부하고 있습니다. 나는 2 개의 질문으로 54 분을 고수했다. ofs
이 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 감사를 가리 키를 파악했다고 생각. 나는 yield가 근본적으로 다음과 같은 것을 깨닫지 못했다 :
put
에서 마지막 상태 인
s => (s,())
을 가져오고, 값 유형을 ofs로 바꿔서
s =>(s,ofs)
을 얻는다. 키가 수익률이 문자 그대로의 수익을 반환하지 않는다는 것을 깨닫고 있지만 State.map로 번역됩니다.
업데이트 지금 옵션 비트를 이해하십시오. 나는 그것이 국가 모나드를 파생하고 있지만 프레 젠 테이션은 여전히 Scalaz로부터의 함축을 사용한다고 생각합니다.
'옵션? ... | ... '비트는 암시 적 변환 (특히 암시 적 클래스'OptionOps')에서 비롯됩니다. StringOps 로의 암시 적 변환으로 인해 문자열에서 'toInt'를 호출 할 수있는 것과 같은 암시 적 변환을 이미 처리했을 것입니다. 이것은 거의 동일합니다. – Shadowlands
1:06:12에서 그는 실제로 옵션을 언급합니다. 계속 지켜봐야했지만 OCD는 그것을 막았습니다. – Pengin
잘하면 그 vid를 보는 다음 OCD 괴로워하는 사람은이 질문을 발견하고, 모든 코멘트를 읽고, vid의 나머지를보기 위해 똑바로 뛰어 오르는 것을 안다! :) – Shadowlands