가변 값은 클로저에서 허용되지 않지만 for .. in
표현식은 ok입니다. C#에서 for 루프는 iterator를 업데이트하지만 F #에서는 보이지 않습니다. 어떻게 그리고 왜?왜 'for .. in'은 폐쇄가 허용됩니까?
4
A
답변
14
F #의 for .. in
은 C#의 foreach
루프와 동일하지만 C#의 for
루프가 아닙니다. 그리고 C# 5 이후에 foreach
루프는 이 아니며 이터레이터를 업데이트합니다. . 당신이
for txt in ["abc"; "def"; "ghi"] do
printfn "%s" txt
를 작성하는 경우 다음 당신은 실제로 세 가지를 만드는 : 그것은 대신 루프를 통해 각 반복에 대한 새로운 변수 (이 폐쇄에 대한 중요한 의미를 가지고 생성 자세한 내용은 Foreach now captures variables! (Access to modified closure) 참조이 F 번호가하는 일 또한 새로운 문자열 변수 당신은 그 루프를 실행하지 않을 때 하나의
이 F 번호가 새로운 변수를 매번 생성되는 다음-매우-작동하지 코드하려고 자신에게 증명하기 위해 :.
let actions = new System.Collections.Generic.List<System.Action<unit>>()
for txt in ["abc"; "def"; "ghi"] do
actions.Add(fun() -> printf "%s " txt)
for action in actions do
action.Invoke()
txt
이 매번 for .. in
루프를 통해 같은 변수를 사용하는 경우 C# 4 이전과 마찬가지로 익명 함수가 변수를 닫고 루프 뒤에 변수 ghi
이 포함되어 있기 때문에 ghi ghi ghi
이 인쇄됩니다. 그러나 위의 코드를 실행하면 C# 5 이상에서 abc def ghi
을 인쇄하는 것을 볼 수 있습니다.
귀하의 질문에 대한 답변은 이 실제로으로 변이되지 않기 때문에 F #이 폐쇄에서 for .. in
을 허용한다는 것입니다.
관련 문제
- 1. for ...의 사용은 허용됩니까?
- 2. for 루프의 헤더에는 무엇이 허용됩니까?
- 3. for 루프에 여러 조건이 허용됩니까?
- 4. 그루비 : 폐쇄가
- 5. 폐쇄가 잘못 되었나요?
- 6. for-in은 (는) 자바 스크립트가 느린 이유가 무엇입니까?
- 7. 그래픽 인스턴스 다운 캐스트 - 왜 허용됩니까?
- 8. ontouch() 이벤트는 어디에서 허용됩니까? 왜 DIV에 없습니까?
- 9. 하스켈에서 어떻게 폐쇄가 작동합니까?
- 10. 녹에서 재귀 폐쇄가 가능합니까?
- 11. 정력 답하라 : 폐쇄가}
- 12. Google 폐쇄가 아코디언을 지원합니까?
- 13. 왜 생성자 매개 변수를 가리키는 것이 허용됩니까? 어떤 개인이 왜
- 14. Inventor Add-in은 어떻게 시작합니까?
- 15. HQL에 해당하는 NOT IN은 무엇입니까?
- 16. 폐쇄가 어떻게 뒤에서 작동합니까? (C#)
- 17. Google 폐쇄가 경고를 표시하지 않음
- 18. 다음 폐쇄가 작동하지 않는 이유는 무엇입니까?
- 19. & XML에서 허용됩니까?
- 20. 왜이 자바 스크립트 폐쇄가 작동하지 않습니까?
- 21. 이 폐쇄가 있습니까? 이것의 핵심은 무엇일까요?
- 22. 왜 목록에 추가하면 for for loop가 손상됩니까?
- 23. for this for loop는 왜 작동하지 않습니까?
- 24. IN 대 IN은 무료 결과를 반환하지 않습니다
- 25. if-in은 true로 평가됩니까? (전용 크롬에서)
- 26. Mercurial과 함께 사용하는 VisualStudio Add-in은 무엇입니까?
- 27. Linq 여기서 IN은 메소드 구문을 사용하여
- 28. 왜 "using namespace"지시문이 C#의 코딩 연습에서 허용됩니까?
- 29. datetime 개체와 8601 문자열을 비교하면 잘못된 결과가 나타납니다. 왜 허용됩니까?
- 30. SQL : 두 가지 조건이 언제 그리고 왜 허용됩니까?
좋은 답변, 고맙습니다. – aikixd