Java 컴파일러에서 "let 표현식"(LetExpr)의 목적은 무엇입니까?
Java 컴파일러는 (찾아보기 ) let에서 표현식을 지원하는 것 같습니다 .com.sun.tools.javac.tree.*LetExpr
JCTree의 한 주석은 일부 구문을 언급합니다.
(let int x = 3; in x+2)
물론 이것은 언어의 문법에 의해 받아 들여지지 않고 이전 컴파일러 단계에서 거부되었습니다.
나는 전에 본 적이없는이 구조의 기원에 대해 궁금합니다.
내부적으로 사용 javac됩니까, 아니면 다른 도구에 의해 합성됩니까? 빛을 보지 못했던 언어 기능에서 자바 초창기의 인공물일까요?
오늘 할 수있는 유용한 것이 있습니까?
일반적으로 왜 존재합니까?
일반적으로 왜 존재합니까?
Google이 제안한대로 오토 박싱을 위해 존재합니다.
다음과 같은 코드가있는 경우 :
Integer foo = 0;
foo++;
Java는 내부적으로 이것을 다음 도우미 표현식으로 만듭니다.
Integer foo = 0;
let int foo_helper = foo.intValue() in foo_helper++;
출처 : http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=6614974
이 표현식에는 분명히 구문 표현이 없으며 컴파일을 단순화하기위한 AST 수준 변환 일뿐입니다.
이를 let 양식이라고하며 "약어"에 사용됩니다.
반면에 절차 언어에서는 변수의 "값"셀이 절차 언어에서 변경 될 수 있으므로이를 "변수 선언"이라고합니다. (기능적 언어에서는 약어 일 뿐이며 처음부터 작성하는 것과 다르지 않습니다.)
사용자가 작성하는 소스 코드 (Haskell, ML, Scheme, SBCL, Arc, ...)에서 사용하는 많은 언어를 생각할 수 있으므로 아직 어떻게 보지 못했는지 모르겠습니다.
아니면 Java로만 의미 했습니까?
let x = 2 in (x + 5)
약어 :
(\x (x + 5)) 2
결국 감소됩니다
(2 + 5)
\람다가 어디에 있어야합니다.
Java에있는 이유는 확실하지 않습니다. 해야 할 일은 변수를 선언하는 것이므로 거기에서 사용되는지 확인하십시오.
참고 URL : https://stackoverflow.com/questions/8372414/purpose-of-let-expression-letexpr-in-the-java-compiler
'Nice programing' 카테고리의 다른 글
| Mongoose의 스키마 변경 처리 (0) | 2020.11.02 |
|---|---|
| 웹 소켓에 대한 기본 PHP 지원을 사용할 수 있습니까? (0) | 2020.11.02 |
| 라이브러리를 jar 파일로 추출하고 패키징하는 것의 차이점 (0) | 2020.11.02 |
| SVG에서 Android Shape로 (0) | 2020.11.02 |
| transclude 함수와 복제 연결 함수로 정확히 무엇을합니까? (0) | 2020.11.02 |