変更を加えた後にスクリプトを実行します。 スクリプトを閉じて再度開かないと動作しないのはなぜですか?私は JSL を学習しており、始めた時には得られなかった動作を得ることができました。 この動作が予期されたものなのか、それとも誤って行った設定変更が原因で発生しているのかを知りたいです。
関数と別のスクリプトを呼び出す単純な「メイン」スクリプトがあります。 JMP を新たに開き、メイン スクリプトまたはそれが呼び出す他の関数/スクリプトを新たに実行すると、それらはすべて正常に実行され、期待どおりの結果が得られます。 ただし、それらのいずれかを変更すると機能しません(たとえば、メインスクリプトに含まれるスクリプト、たとえば下の最後の行をコメントした場合)。 開いているスクリプトをすべて閉じて再起動すると、再び動作します。 他のプログラミング言語から来ている私は、そのような動作を期待していません。 どのような方向でも大歓迎です
以下に私のメインスクリプトの例を示します (私は JMP13 を使用しています)。
getDataTable = getDataTable4partID("partID","partIDname");
include ("plotallcharts.jsl");
include ("generateJournal.jsl");上記の最後の行をコメント化します(または、clear log () のコメントを解除した場合)。
//clear log ();
getDataTable = getDataTable4partID("partID","partIDname");
include ("plotallcharts.jsl");
//include ("generateJournal.jsl");上記のスクリプトで次のエラーが発生します
Name Unresolved: getDataTable4partID in access or evaluation of 'getDataTable4partID' , getDataTable4partID( "partID", "partIDname" ) /*###*/
開いているスクリプトと関数 (場合によっては JMP) をすべて閉じて、再度起動すると、すべてが再び動作するようです。 何が起こっているのかわかりません....
どのような方向でも大歓迎です。
自動化とスクリプト作成Re: 変更後のスクリプトの実行。 スクリプトを閉じて再度開かないと動作しないのはなぜですか?はい、getDataTable4partID 関数は、呼び出す前に JSL によって解析される必要があります。include ステートメントは、関数を読み取り、メモリにロードします。メモリに格納されると呼び出すことができます。
Re: 変更後のスクリプトの実行。 スクリプトを閉じて再度開かないと動作しないのはなぜですか?私の無知で申し訳ありませんが、これを使用する必要がある理由についての説明はありますか?
include ("getDataTable4partID.jsl");私の関数呼び出しが機能するには?
Re: 変更後のスクリプトの実行。 スクリプトを閉じて再度開かないと動作しないのはなぜですか?関数は呼び出す前に解析する必要があります。JSL インタープリターは、コードを一度に 1 行ずつステップダウンしていきます。関数を呼び出す前に関数コードをステップ実行していない場合、JSL は停止します。JSL 内のすべての変数などにも同じことが当てはまります。 したがって:
Names Default to Here( 1 );
Clear Symbols();
print( a );
a = 42;
で失敗します
Name Unresolved: a in access or evaluation of 'a' , a/*###*/
at line 3 in Script 4.jsl
その間
Names Default to Here( 1 );
Clear Symbols();
a = 42;
print( a );
エラーなしで実行されます
Re: 変更後のスクリプトの実行。 スクリプトを閉じて再度開かないと動作しないのはなぜですか?追加
include ("getDataTable4partID.jsl");関数呼び出しの前 ( getDataTable4partID.jsl は関数スクリプトの名前です。 )
getDataTable = getDataTable4partID("partID","partIDname"); つまり
Names Default to Here( 1 );
Clear Symbols();
include (''getDataTable4partID.jsl");
getDataTable = getDataTable4partID("partID","partIDname");
include ("plotallcharts.jsl");
include ("generateJournal.jsl");すべての問題が解決されたようです。 理由は何ですか?
Re: 変更後のスクリプトの実行。 スクリプトを閉じて再度開かないと動作しないのはなぜですか?@txnelson
関数getDataTable4partID が定義され、保存され、実行されました。 以前は期待どおりに動作していました。
それを呼び出しているメイン スクリプト、またはメイン スクリプトに含まれている他のスクリプトも機能しなくなり、機能しなくなりました。
Re: 変更後のスクリプトの実行。 スクリプトを閉じて再度開かないと動作しないのはなぜですか?Names Default to Here( 1 );
Clear Symbols();
getDataTable = getDataTable4partID("partID","partIDname");
include ("plotallcharts.jsl");
include ("generateJournal.jsl");
これがコードの最初のセクションであると思います。 正しい?
コードの 3 行目では、「getDataTable4partID」という関数を探しています。コードがその行を実行しようとした時点では、その関数は定義されていませんでした。関数定義を呼び出す前に、関数定義を実行する必要があります。
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();
これにより、名前空間環境が安定し、以前の値がすべてクリアされるため、コードを先頭から実行するたびに最初から新しく開始されます。
Re: 変更後のスクリプトの実行。 スクリプトを閉じて再度開かないと動作しないのはなぜですか?ありがとう@txnelson 。
ここに機能があります
getDataTable4partID
私に使用することを提案していますか
clear symbols();
// clear globals();
メインスクリプトの先頭にある?
もしそうなら、私は行動を何も変えずに飽きてしまったということです。
また、上で言い忘れましたが、メイン スクリプトが (変更を加えた後) 実行されず、スクリプトを再び期待どおりに実行するために JMP を再起動する必要がある場合、メイン スクリプトが呼び出している関数も実行する必要があります。 1 回、これがないとメイン スクリプトは実行されません。 これは明らかに望ましくない行為であり、自分が正しく行動していないのではないかと心配になります。
Re: 変更後のスクリプトの実行。 スクリプトを閉じて再度開かないと動作しないのはなぜですか?あなたの例では、関数を定義する場所がわかりません
getDataTable4partID
JSL はインタープリタ言語であり、呼び出す前にコード内で参照される項目を作成する必要があります。これはコンパイル言語ではなく、最初にすべてのコードを通過して関数などを識別します。混乱する可能性があるのは、関数が一度定義されると、その関数がメモリ内に残り、関数でクリアされるまで使用できることです。
clear symbols();<BR />// or<BR />clear globals();
これを念頭に置いてコードを実行すると、JSL が関数を見つけられない理由がわかるかもしれません。