Scara의 foldLeft가 뭐였더라?
문제 코드.
def getVotesByRelationIds(rel: RelationIds[Vote]): Future[Seq[Vote]] = db.run(
Votes.filter { vote =>
rel.rawIds
.collect({
case (SimpleRelation("byUser"), ids: Seq[Int]) => vote.userId inSet ids
case (SimpleRelation("byLink"), ids: Seq[Int]) => vote.linkId inSet ids
})
.foldLeft(true: Rep[Boolean])(_ || _) // ← なにやってんだっけ…
}.result
)
결과적으로 foldLeft의 내용을 진지하게 쓰면 이렇다 .foldLeft(true: Rep[Boolean]) { (acc, rep) => acc || rep }
생각나다
사인 좀 봐.왼쪽에서 오른쪽으로 스캔하다.
z
는 초기값이고 op
의 첫 번째 파라미터는 accumuulator이다.def foldLeft[B](z: B)(op: (B, A) => B): B
구체적인 예로 감각을 회복한다.왼쪽부터 순서대로: 1:Nil→2:List(1)→3:List(2,1)Seq(1, 2, 3).foldLeft(Nil: List[Int])((acc, x) => x :: acc)
// List(3, 2, 1)
밑줄을 사용하여 생략하여 쓰는 경우.위의 예의범절은 다음과 같이 쓸 수 있다.(_ :+ _)
요컨대((_: List[Int]), (_: Int))
.엉덩이에 요소를 넣는 것은 요소 수에 따라 시간을 선형적으로 소비하는 것으로 좋지 않지만 예이기 때문에 신경 쓰지 마세요.Seq(1, 2, 3).foldLeft(Nil: List[Int])((acc, x) => acc :+ x)
Seq(1, 2, 3).foldLeft(0)(_ :+ _)
밑줄을 사용하는 경우 acc, x의 순서를 지키지 않으면 안 되기 때문에 다음과 같이 바꾸면 욕을 먹기 때문(acc :: x)
으로 설명한다.Seq(1, 2, 3).foldLeft(Nil: List[Int])((acc, x) => x :: acc)
Seq(1, 2, 3).foldLeft(Nil: List[Int])(_ :: _) // error: value :: is not a member of Int
그나저나 value:is not a member of Int가 이런 느낌이라고 해서 뒤집혔어요.1 :: 2 :: Nil
Nil.::(2).::(1)
기타
foldRight에 관해서는 이 문장도 참고할 수 있다
각주
https://www.howtographql.com/graphql-scala/7-relations/ ↩︎
Reference
이 문제에 관하여(Scara의 foldLeft가 뭐였더라?), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://zenn.dev/smzst/articles/e7150c88c0d927텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)