나는 비약을 배우고 난 현재 캡처 및 기능의 일부 응용 프로그램의 의미를 처리하고 있습니다.
저는 이미 fn(x)-> x + 1 end
구문에 익숙합니다.비약 익명 함수, 캡처 및 일부 응용 프로그램
저는 놀라운 행동을 생각했습니다. 나는 즉시 익명 함수 &(&1 <> "-X")
를 "다시"라는 의미로 해석 할
f = &(&1 <> "-X")
# #Function<6.50752066/1 in :erl_eval.expr/5>
is_function f
# true
is_function &(&1 <> "-X")
# true
f == &(&1 <> "-X")
# false
가 동일하지 않은 값을하는 값을 반환 예를 들어,이 조각의 마지막 표현이 false
반환하는 것을 관찰했습니다 ==
의미에 따라) f
에 저장됩니다.
잘 될 것이고,이 다른 조각 내 이론을 확인합니다 : 때문에이
g = &(String.upcase(&1))
# &String.upcase/1
is_function g
# true
is_function &(String.upcase(&1))
# true
g == &(String.upcase(&1))
# true
는 g
가 다시 익명 함수와 동일 할을 - 어쩌면 - 기존라는 이름의 기능을 캡처하는 것은 컴파일러에 의해 최적화하고, 매번 동일한 값이 리턴됩니다. 두 번째 스 니펫에있는 첫 번째 줄의 반환 값은 두 경우가 다르게 취급된다는 아이디어를 확인하는 것으로 보입니다.
f = &(&1 <> "-X")
z = &(f.(&1))
#Function<6.50752066/1 in :erl_eval.expr/5>
z == &(f.(&1))
# false
마지막 문이 다시 false입니다
나는 그때는 이미 존재임을 의미하는 "알려진"기능을 시도했다. 모두 이미 존재하기 때문에
이 나는, &(f.(&1))
가 &(String.upcase(&1))
유사한 방식으로 처리 될 것으로 예상했을 것이다.
는 다음 기능을 캡처의 의미 무엇입니까?