복붙노트

[SCALA] 스칼라 "<-"이해를위한

SCALA

스칼라 "<-"이해를위한

나는 스칼라 항상 무엇이든 "자연의 설명"을 가지고 있음을 발견했다. 항상 같은 뭔가 "오,하지만 그냥이에 호출되는 함수이와 객체 및 해당 매개 변수입니다." 어떤 의미에서, 아무것도 우리가 다른 언어에서 알고있는 정말 컴파일러 마법 없다.

내 질문은 <에 - 다음 코드에서 사용되는 연산자

for(i <- 0 to 10) println(i)

이 예에서 나는 그것이 같은 것으로 다시 쓰는 볼 수 있습니다 :

0.to(10).foreach((i:Int)=>println(i))

그러나 이것은 내가 foreach는 함수 내에서 익명 함수에 수행 됐는지 설명하지 않습니다. 당신은 내가 쓰기 시점에서 아직 선언 된 변수 객체가 아닌,하고. 그래서 무엇이며 어떻게이 foreach는 내부에 이월되고있다?

내 생각 엔 내가 마침내 사실 컴파일러 마법에 뭔가를 발견 한 것입니다

시간 내 줘서 고마워.

명확히하기 위해, 내 질문은 : 수행 방법 <- 코드의 1 라인에서 작업자의 작업 난이 함수로 호출 할 수있는 대상이 아니기 때문에.

해결법

  1. ==============================

    1.<- = 같이, 언어 정의 키워드 상징> 그러나 뚜렷한 콘트라스트로 -> (a 정의 심볼이다). 이 기본 스칼라 문법의 일부이기 때문에, 사용자 정의 구조에 의해 수행 될 수없는 무언가이다 (당신의 예제에서 난 용) 바인딩을 만드는 데 사용할 수 있습니다.

    <- = 같이, 언어 정의 키워드 상징> 그러나 뚜렷한 콘트라스트로 -> (a 정의 심볼이다). 이 기본 스칼라 문법의 일부이기 때문에, 사용자 정의 구조에 의해 수행 될 수없는 무언가이다 (당신의 예제에서 난 용) 바인딩을 만드는 데 사용할 수 있습니다.

  2. ==============================

    2.데이브의 답변을 증대하기 위해, 여기에 대한 번역 스키마입니다 '를위한 지능형'스칼라 언어 사양에서 :

    데이브의 답변을 증대하기 위해, 여기에 대한 번역 스키마입니다 '를위한 지능형'스칼라 언어 사양에서 :

  3. ==============================

    3.이 경우, 정말 컴파일러 마법의 비트입니다. /지도를 필터링 할 수-이해에서 번역 / flatmap 형태는 많은 업데이트의 특별한 형태의 변환 방법을 적용 같은 desugaring의 특별한 비트입니다.

    이 경우, 정말 컴파일러 마법의 비트입니다. /지도를 필터링 할 수-이해에서 번역 / flatmap 형태는 많은 업데이트의 특별한 형태의 변환 방법을 적용 같은 desugaring의 특별한 비트입니다.

  4. from https://stackoverflow.com/questions/3754089/scala-for-comprehension by cc-by-sa and MIT license