変更を加えた後にスクリプトを実行する。 スクリプトを閉じて再度開くと機能しない-なぜですか?私はJSLを学び、始めたときとは思えない行動をとっています。 この動作が予期されるものなのか、それとも誤って設定を変更したために発生したものなのかを知りたいのですが。
関数と別のスクリプトを呼び出す単純な「メイン」スクリプトがあります。 JMPを新しく開いて、メインスクリプトまたはそれが呼び出す他の関数/スクリプトを新しく実行すると、すべて正常に実行され、期待される結果が得られます。 ただし、これらのいずれかに変更を加えた場合は機能しません(たとえば、メインスクリプトに含まれているスクリプトにコメントした場合、たとえば、以下の最後の行)。 開いているスクリプトをすべて閉じてから再起動すると、再び機能します。 他のプログラミング言語から来ているので、私はそのような振る舞いを期待していません。 どんな方向でも大歓迎です
以下の私のメインスクリプトの例(私はJMP13を使用しています)。
//clear log ();<BR />getDataTable = getDataTable4partID("partID","partIDname");
include ("plotallcharts.jsl");
include ("generateJournal.jsl");上記の最後の行にコメントする(またはクリアログ()のコメントを外す場合)ie
//clear log ();
getDataTable = getDataTable4partID("partID","partIDname");
include ("plotallcharts.jsl");
//include ("generateJournal.jsl");上記のスクリプトで次のエラーが発生します
Name Unresolved: getDataTable4partID in access or evaluation of 'getDataTable4partID' , getDataTable4partID( "partID", "partIDname" ) /*###*/
どんな方向でも大歓迎です。
スクリプティングRe:変更を加えた後にスクリプトを実行します。 スクリプトを閉じて再度開くと機能しない-なぜですか?あなたの例では、関数をどこで定義するかわかりません
getDataTable4partID
JSLはインタプリタ言語であり、呼び出す前に、コードで参照されている項目を作成する必要があります。これはコンパイルされた言語ではなく、最初にすべてのコードを通過し、関数などを識別します。混乱する可能性があるのは、関数が定義されると、メモリに残り、関数がクリアされるまで使用できることです。
clear symbols();<BR />// or<BR />clear globals();
これを念頭に置いてコードを実行すると、JSLが関数を見つけられない理由がわかる場合があります。
Re:変更を加えた後にスクリプトを実行します。 スクリプトを閉じて再度開くと機能しない-なぜですか?ありがとう@txnelson 。
これが機能です
getDataTable4partID
あなたは私が使うことを提案していますか
clear symbols();
// clear globals();
メインスクリプトの上部にありますか?
もしそうなら、私は行動を変えることなくそれを疲れさせました。
また、メインスクリプトが実行されない場合(スクリプトを変更した後)、スクリプトを期待どおりに実行するためにJMPを再起動する必要がある場合は、メインスクリプトが呼び出している関数も実行する必要があることを上記で忘れました。 、一度、それなしでは私のメインスクリプトは実行されません。 これは明らかに望ましくない行動であり、私は物事を適切に行っていないのではないかと心配しています。
Re:変更を加えた後にスクリプトを実行します。 スクリプトを閉じて再度開くと機能しない-なぜですか?スクリプト全体を次のように開始する必要があります。
Names Default to Here( 1 );
Clear Symbols();
これにより、名前空間環境が安定し、以前の値がすべてクリアされるため、コードを最初から実行するたびに新鮮な状態になります。
Re:変更を加えた後にスクリプトを実行します。 スクリプトを閉じて再度開くと機能しない-なぜですか?ありがとう@txnelson 。 OK、これが私がしたことであり、JMPを閉じて再実行した後、またはJMPを再起動した後でも、スクリプトと関数が機能しなくなりました。
私のメインスクリプト
Names Default to Here( 1 );
Clear Symbols();
getDataTable = getDataTable4partID("partID","partIDname");
include ("plotallcharts.jsl");
include ("generateJournal.jsl");私の機能は(データベースの詳細なしで)
Names Default to Here (1)
getDataTable4PartID = Function({PartID}, {dtTemp},
dtTemp = Open Database("connectionstring",
"select '" || PartID || "' as value
from dual",
PartID
);
return(dtTemp);
);と私のスクリプト
plotallcharts.jsl;
また、その最初のラインは
Names Default to Here (1)
まだエラーが発生します
Name Unresolved: getDataTable4partID in access or evaluation of 'getDataTable4partID' , getDataTable4partID( "partID", "partIDname" ) /*###*/
ただし、メインスクリプトの実行時にログに何も表示されない場合があります。
Re:変更を加えた後にスクリプトを実行します。 スクリプトを閉じて再度開くと機能しない-なぜですか?Names Default to Here( 1 );
Clear Symbols();
getDataTable = getDataTable4partID("partID","partIDname");
include ("plotallcharts.jsl");
include ("generateJournal.jsl");
これがコードの最初のセクションだと思います。 正しい?
コードの3行目は、「getDataTable4partID」という関数を探しています。コードがその行を実行しようとしたときに、その関数は定義されていません。関数定義を呼び出す前に、関数定義を実行する必要があります。