웹상의 유용한 자료 모음:
- Discovery Summit 시리즈에는 @조셉_모건 의 훌륭한 강의가 있습니다.
https://community.jmp.com/t5/Abstracts/JSL을 사용하여 효율적이고 견고한 애플리케이션 개발-EU-2018-415/ev-p/849638
조셉은 JSL에서 표현식 처리 의 비밀과 가능성 , 그리고 그 기능과 관련된 함정에 대해 설명합니다.
이 강의 는 표현식 처리 함수: 1부 - Expr(), NameExpr(), Eval(), ... 난제 풀기 내용을 기반으로 합니다.
- @Jasean이 동적으로 JSL 코드를 작성합니다
(Universal Tricks #1 및 #2에 대한 단계별 가이드는 아래를 참조하세요)
- 문자열과 표현식의 차이점 - 50줄로 설명:
@크레이지_헤일스 의 커뮤니티 게시물에 답글하기
- 다양한 응용 사례를 담은 훌륭한 강좌입니다: 세션 9: 고급 JSL , @jthi
- 추가 정보는 스크립팅 가이드에서 확인할 수 있습니다: advanced-expressions-macros-and-lists
기초
내부:
#062 - JSL에서의 표현식 처리
#092 - 표현식 처리
| 1 |
(2+1) 표현식을 평가하지 마세요. 그냥 x 변수에 저장하면 됩니다 |
x = 식 (2+1) |
| 2 |
x 에 저장된 표현식을 가져옵니다 |
이름 표현식 (x) |
| 3 |
힘 평가 |
평가 (myexpr) |
| 4 |
xyz를 평가하고 Expr(xyz)를 반환 값으로 바꾸세요 |
평가식( ... 식(xyz)) |
*) 참고: 1과 4에서는 동일한 함수 " 표현(...)" 이지만 효과는 반대입니다.
1에서는 표현 의 내용이 평가되지 않지만 4에서는 표현 의 내용만 평가됩니다.
3가지 보편적인 트릭
| 1 |
평가식() 을 통해 표현식의 일부를 미리 평가합니다. ... 그런 다음 Eval() 을 통해 표현식을 평가합니다. 모든 문제의 90%를 해결합니다(옵션 2: 99%) |
Eval( 평가 표현식 ( ... 경험치 (eval 1st) ...)) 옵션 2: Eval( 평가 표현식 ( ... 경험치 (Name Expr( )) ...))
|
| 2 |
99% 같은 문제를 해결합니다 # 1 - 옵션 2 |
Eval(대체(Expr(), Expr(), 이름 Expr()))
|
| 3 |
ultimate trick for 열 참조 ( @jthi, e.g. 세션 9: 고급 JSL @33min ) |
이름 표현(열로("column name" or :열)) |
참고:
일부 함수는 인수를 평가하고, 일부는 평가하지 않으며, 일부는 인수 중 일부를 평가합니다. 머리() 와 같은 함수는 어느 정도까지 인수를 평가합니다. Head가 인수를 평가할까요? 다른 함수는 인수를 평가하지만 변수가 하나인 경우 이름 Expr() 처럼 동작합니다. 예외는 Show, Write, Print 유틸리티입니다.
안타깝게도 이러한 세부 정보 대부분은 사용자에게 공개되지 않습니다. 사용자는 추측해야 합니다.
JSL 편집기가 사용자에게 정보를 대화형으로 표시하여 도움을 주길 바랍니다. JSL 편집기의 고급 구문 강조 표시 - 함수가 인수를 평가합니까?
-> 자동 지원을 받으려면 링크를 따라가서 투표하세요!
커뮤니티의 예:
[더주제 컨테이너이와 같이]
안녕하세요 @hogi 님 ,
이 정보를 통합하고 많은 정보를 모아주셔서 감사합니다. 그 이야기는 정말 유익할 것 같습니다.
JMP와 JSL에서 여러 가지 방법으로 작업을 수행할 수 있는 방식이 마음에 들지만, 때로는 현재 상황에 매우 특정한 방법이 너무 많아서 일반적이고 코드를 작성하려고 할 때 다소 번거로울 수 있습니다. 다양한 시나리오를 처리할 수 있습니다.
감사해요!,
DS
JSL과 변수 - JSL 코드를 작성할 때 알아야 할 3가지 문제.
문제는 다르지만 해결책은 항상 똑같습니다 : )
해결책은?
-> 바로 본문을 읽어보세요.
c= 5;
col = Name Expr(:height);
dt = Open( "$SAMPLE_DATA/Big Class.jmp" );
gb = graph Builder(); framebox = report(gb)[FrameBox(1)];
// issues with variables in a message
// all 3 of them look quite innocent
// but none of them will survive a restart
New Column ("rescaled", Formula (c * :height));
dt << New Column ("rescaled", Formula (5 * col));
framebox << Add Graphics Script(Y Function( c * x, x ) );
// no issue here:
dt << concatenate(dt);
dt << new column(c, formula(3));메시지에는 절대로 변수를 사용하지 마세요!
하지만 이건 좀 지나치죠. 마지막 두 가지 예는 문제가 없습니다.