Spazi dei nomi e progettiCIAO,
utilizziamo alcune funzioni personalizzate che condividiamo con altri colleghi tramite un componente aggiuntivo.
Lo spazio dei nomi "personalizzato" viene creato nello spazio dei nomi globale, è possibile accedere alle funzioni tramite custom:myfunction .
Il problema: alcuni colleghi utilizzano Progetti.
un progetto ha il suo namespace globale e da lì le funzioni personalizzate non sono accessibili:
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")));
);
D'altro canto, non è possibile eseguire lo script una seconda volta all'interno del progetto [per creare una funzione personalizzata duplicata nell'ambito del progetto]. Sembra che JMP trovi lo spazio dei nomi "globale" e provi a eliminarlo (!!):
project = New Project(
Run Script(Add Custom Functions( New Custom Function( "custom", "myfunc", Function( {x, y}, x + y - 1 ) )));
);
Come si utilizzano/accedono alle funzioni personalizzate in parallelo da JMP standard e dai progetti?
Automazione e scriptingRe: Funzioni personalizzate dall'interno dei progettiForse una soluzione alternativa:
salva un simbolo *) nello spazio dei nomi radice (tramite :::), per accedere allo spazio dei nomi della funzione personalizzata tramite il simbolo:
::: custom = New Namespace("custom" );
// now accessible from everywhere via :::custom
project = New Project(
Run Script(Caption(Char(Namespace Exists( ::: custom ))));
);
Purtroppo:
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")));
);
*) NB: Interessante: il simbolo deve avere lo stesso nome dello spazio dei nomi (!)
Cosa non funziona:
::: customNS = New Namespace( "custom" );
...
:::customNS:myFunc(1)
Sebbene:
is namespace(:::customNS) // -> 1
Re: Funzioni personalizzate dall'interno dei progettiAh, non è un problema con le funzioni personalizzate , sembra essere un problema generale con gli spazi dei nomi e i progetti :
::: 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")));
);Interessante: ecco come funziona
... ma non molto pratico
project = New Project(Run Script(Try(Caption("project: " || namespace(:::myNS):x), Caption ("fail"))));Re: Funzioni personalizzate dall'interno dei progettiHo informato il supporto JMP (# 00170669) e ho ricevuto il feedback che i problemi sono considerati un bug:
:::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
Un trucco meraviglioso: localizzare lo spazio dei nomi radice:
myVar = :::myNs
myVar:x // success
grazie mille, @Jasean !!! Molto semplice, molto più pratico di namespace(:::myNS):x .
Re: Funzioni personalizzate dall'interno dei progettiDiscussione precedente con un argomento simile:
Impossibile eseguire i componenti aggiuntivi nel progetto
Re: Funzioni personalizzate dall'interno dei progettiMi è stato utile, grazie mille per aver condiviso il link.
Re: Funzioni personalizzate dall'interno dei progettiHo appena aggiunto l'argomento a Tiny Traps in Jmp e JSL e ho raggruppato gli argomenti correlati a Namespace.