네임스페이스와 프로젝트안녕,
우리는 추가 기능을 통해 다른 동료들과 공유할 수 있는 몇 가지 사용자 정의 함수를 사용합니다.
"custom" 네임스페이스는 글로벌 네임스페이스에 생성되고, 함수는 custom:myfunction을 통해 액세스할 수 있습니다.
문제: 일부 동료는 프로젝트를 사용합니다.
프로젝트에는 자체 글로벌 네임스페이스가 있으며 거기에서는 사용자 정의 함수에 액세스할 수 없습니다.
Add Custom Functions( New Custom Function( "custom", "myfunc", Function( {x}, x + 20 ) ));
project = New Project(
Run Script(Try(custom:myfunc(1), Caption ("Namespace not accessible")));
);
반면에 프로젝트 내에서 스크립트를 두 번째로 실행하는 것은 불가능합니다[프로젝트 범위에서 중복된 사용자 정의 함수를 생성하기 위해]. JMP가 "글로벌" 네임스페이스를 찾아서 삭제하려고 시도하는 것 같습니다(!!):
project = New Project(
Run Script(Add Custom Functions( New Custom Function( "custom", "myfunc", Function( {x, y}, x + y - 1 ) )));
);
표준 JMP와 프로젝트에서 사용자 정의 함수를 병렬로 사용하거나 액세스하려면 어떻게 해야 합니까?
자동화 및 스크립팅Re: 프로젝트 내 사용자 정의 함수어쩌면 해결책이 될 수도 있습니다:
루트 네임스페이스에 심볼 *)을 저장하여 (:::를 통해) 심볼을 통해 사용자 정의 함수 네임스페이스에 액세스합니다.
::: custom = New Namespace("custom" );
// now accessible from everywhere via :::custom
project = New Project(
Run Script(Caption(Char(Namespace Exists( ::: custom ))));
);
안타깝게도:
Add Custom Functions( New Custom Function( "custom", "myfunc", Function( {x}, x + 20 ) ));
project = New Project(
Run Script(Try(:::custom:myfunc(1), Caption ("content of the Namespace is not accessible")));
);
*) 참고: 흥미로운 점은 심볼의 이름이 네임스페이스와 동일해야 한다는 것입니다.
. 작동하지 않는 것:
::: customNS = New Namespace( "custom" );
...
:::customNS:myFunc(1)
하지만:
is namespace(:::customNS) // -> 1
Re: 프로젝트 내 사용자 정의 함수아, 사용자 정의 함수 의 문제가 아니라 네임스페이스 와 프로젝트 의 일반적인 문제인 듯합니다.
::: myNS = New Namespace("myNS");
:::myNS:x ="success";
caption ("direct: "|| :::myNS:x);
wait(2);
caption(remove);
project = New Project(
Run Script(Try(Caption("project: " || :::myNS:x), Caption ("fail")));
);흥미롭네요: 이게 작동 방식이에요
...하지만 별로 실용적이지 않아요
project = New Project(Run Script(Try(Caption("project: " || namespace(:::myNS):x), Caption ("fail"))));Re: 프로젝트 내 사용자 정의 함수저는 JMP 지원팀(# 00170669)에 이 문제를 알렸고 해당 문제는 버그로 간주된다는 피드백을 받았습니다.
:::myNs; // // New Namespace("myNS", ...)
As Root(myNs); // New Namespace("myNS", ...)
//:::myNs:x; // fail in project, works in script window outside project
As Root(myNs):x // success
Eval(:::myNs):x; // success
Namespace(:::myNs):x; // success
놀라운 기술: 루트 네임스페이스를 지역화하세요.
myVar = :::myNs
myVar:x // success
@Jasean 님 , 정말 고맙습니다!!! 매우 매끄럽고 namespace(:::myNS):x 보다 훨씬 실용적입니다.
Re: 프로젝트 내 사용자 정의 함수비슷한 주제의 이전 토론:
Project 내에서 애드인을 실행할 수 없습니다.
Re: 프로젝트 내 사용자 정의 함수도움이 되었습니다. 링크를 공유해 주셔서 정말 감사합니다.
Re: 프로젝트 내 사용자 정의 함수방금 Jmp와 JSL에서 Tiny Traps 에 대한 주제를 추가했고, 네임스페이스 관련 주제를 묶었습니다.