ウェブ上の便利なリソースのコレクション:
- Discovery Summit シリーズには、 ジョセフ・モーガンによる素晴らしい講演があります。
https://community.jmp.com/t5/Abstracts/JSL を使用した効率的な堅牢なアプリケーションの開発-EU-2018-415/ev-p/849638
Joseph は、 JSL での式処理の秘密と可能性、そしてその機能に関連する落とし穴について説明します。
この講義は、式処理関数: パート I - Expr()、NameExpr()、Eval() などの難問の解明の内容に基づいています。
- @ジェシアンによるJSL コードの動的記述
(ユニバーサルトリック#1と#2のステップバイステップガイドは下記を参照)
- 文字列と式の違い - 50 行で:
@Craige_Halesのコミュニティ投稿に返信する
- 多くの応用事例がある素晴らしいコース: セッション 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を評価し、 式(xyz)を戻り値に置き換える |
Expr( ... Expr(xyz)) を評価する |
*) 注意: 1 と 4 は同じ関数「 Expr(...)」ですが、効果は逆になります。
1では式の内容は評価されませんが、4では式の内容だけが評価されます。
3つの普遍的なトリック
| 1 |
式の評価()を使って式の一部を事前評価する ... Eval()で式を評価します すべての問題の90%を解決します(オプション2の場合は99%)。 |
評価(評価式(...評価式(1番目)...)) オプション2: 評価(評価式(...式(名前式())...))
|
| 2 |
99%の同じ問題を解決します #1 - オプション2 |
評価(置換(Expr(), Expr(), 名前Expr()))
|
| 3 |
ultimate trick for 列参照 ( @jthi, e.g. セッション9: 上級日本語手話 @33min ) |
名前表現(列として("column name" or :カラム)) |
注意:
関数には、引数を評価するものもあれば、評価しないものもあり、引数の一部を評価するものもあります。head ()のように、引数をある程度評価する関数もあります。Head は引数を評価しますか? - また、引数を評価しますが、単一の変数の場合は名前式()のように動作するものもあります。 例外は、ユーティリティ 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));メッセージでは変数を絶対に使用しないでください、と考える人もいるかもしれません。
しかし、これは行き過ぎです。最後の 2 つの例には問題はありません。