for 바로뒤의 중괄호의 의미

104 views
Skip to first unread message

박우영

unread,
Sep 1, 2014, 2:50:00 AM9/1/14
to scala...@googlegroups.com
for {
realTimeKeyword <- RealTimeKeywordWS;
exchange        <- ExchangeWS;
recommend       <- RecommendWS(request.user.account_id, location, timezone)
} yield {
val res = realTimeKeyword ::: exchange ::: recommend
Ok(Json.obj("data" -> Json.toJson(res)))
}

이문에서 for 바로뒤의 중괄호는 어떤 의미인가요?? 

그리고 이렇게 쓰는게 맞는건지도 궁금합니다.

Outsider (JeongHoon Byun)

unread,
Sep 1, 2014, 3:41:27 AM9/1/14
to 라코딩단스칼라

Scala에서 for는 다양하게 사용할 수 있는데 간단한 형식은 다음과 같습니다.

for (i <- 1 to 4) yield i

여기서 (){}로 대체해서 사용할 수 있고 그냥 코드 블럭으로 보시면 될 것 같습니다.

이중 for문 같은 경우에

for (
    i <- 1 to 4;
    j <- 1 to 3
) yield (i, j)

와 같이 사용할 수 있습니다.

for {
    i <- 1 to 4
    j <- 1 to 3
} yield (i, j)

처럼 중괄호로 쓸 경우에는 코드블럭이라서 세미콜론을 자동으로 붙혀주기 때문에 세미콜론 없이 코드를 작성할 수 있습니다.

제가 아는 건 이정도 차이네요.




--
이 메일은 Google 그룹스 '라 스칼라 코딩단' 그룹에 가입한 분들에게 전송되는 메시지입니다.
이 그룹에서 탈퇴하고 더 이상 이메일을 받지 않으려면 scala-korea...@googlegroups.com에 이메일을 보내세요.
이 그룹에 게시하려면 scala...@googlegroups.com에 이메일을 보내세요.
웹에서 이 토론을 보려면 https://groups.google.com/d/msgid/scala-korea/ad6325f6-5e95-43f3-ac5e-94080e16427a%40googlegroups.com을(를) 방문하세요.
더 많은 옵션을 보려면 https://groups.google.com/d/optout을(를) 방문하세요.



--
/************************************************
Outsider (JeongHoon Byun)
Programmer & Coder

Twitter : @Outsideris
*************************************************/

옥용수

unread,
Sep 1, 2014, 3:42:57 AM9/1/14
to scala...@googlegroups.com
복수개의 줄을 표현할 때 {} 로 합니다.
단일개의 줄은 () 로 해요.
만약 단일개의 줄에서 여러 줄을 표현하고자 하는 경우 ; 로 구분합니다.

다음의 것을 참고하시면 도움이 될꺼에요.
> Programming in Scala 7장 - For expressions 



2014년 9월 1일 오후 3:49, 박우영 <parkwoo...@gmail.com>님이 작성:

--

최정열

unread,
Sep 1, 2014, 4:26:44 AM9/1/14
to scala...@googlegroups.com
(), {} 차이는 위 분들의 답변대로입니다.

참고로 말씀드리면... 위의 코드를 보면 일반적인 loop 문으로 사용한 것 같지 않네요.

for문은 Iterable 뿐만 아니라 Option타입같은 모나드타입의 연산을 할 때도 자주 사용하기 때문에, for문이 무조건 루프라고 생각하면 약간 혼란 스러울 수 있습니다.

for-comprehension 을 찾아보시고 flatmap, foreach, filter 등으로 변환되는 과정을 눈여겨 보시면 도움 될 것 같습니다.




2014년 9월 1일 오후 4:42, 옥용수 <okyo...@gmail.com>님이 작성:

Hyunsok Oh

unread,
Sep 1, 2014, 7:01:37 AM9/1/14
to scala...@googlegroups.com
조금 사족을 달자면 ()안에 복수개의 식을 ;로 구분해 쓸 수 있는 곳은 for (...) 부분의 ...밖에 없습니다. 다른
곳에서는 (...)가 여러 식을 ;로 나눈 블럭을 만들 수 없습니다. 굳이 ()안에 여러 식을 넣으려면
(exp1,exp2,exp3)처럼 해야 하는데 이건 { exp1; exp2; exp3 }와는 전혀 다른 식이 되어버리죠.

for은 컴파일러가 특별히 처리하는 설탕 문법이라서 그렇게 만든 것 같습니다. 정열님께서 말씀해 주신 대로 변환 후에는
map/flatMap/forEach/filter 등을 호출하는 것으로 다 변하니까 변환 전의 구문에 조금 유연성을 부여한 것
같습니다.
> https://groups.google.com/d/msgid/scala-korea/CAD5fO2omLxHZjk-hzt8BAsxYSfboTNvK77dPoxLcoBxu9BMpXg%40mail.gmail.com을(를)
Reply all
Reply to author
Forward
0 new messages