関数の戻り値のインデックス付け今日の課題:
f=Function({}, {1,2,3});
tmp=f();
y=tmp[1]; // works
x=f()[1] // doesn't work
この問題を理解することは、JSL がどのように機能するかを理解するのに大いに役立ちます:-)
自動化とスクリプトRe: 関数の戻り値のインデックス逆の問題:
names default to here(1);
x=1;
Eval(x=1); // "does the same"
x= Expr(hello);
Eval(x= Expr(hello)); // fails
Re: 関数の戻り値のインデックスヘッドはその議論を評価しますか?
割り当てるに関しては、引数を評価しますか?
1. 引数: いいえ
2. 引数: はい
結果から最初の項目を取得する前に式を「手動で」評価する必要がある場合は、Eval() を使用します。
x=f()[1] // doesn't work
x=Eval(f())[1] // works
接着剤について:
任意の引数: はい
.... そして評価:
はい、もちろん!
それに加えて、引数の最初の評価の後に、戻り値*)の追加評価があります。つまり、
Eval(print(1);x= Expr(hello);print(x); Expr(print(2)));
x=式(こんにちは)を正しく割り当てて出力します。

*) -> リンク / ドキュメント / コミュニティ?
Re: 関数の戻り値のインデックス
If you need to evaluate an expression "manually" [
前に taking the fist item from the result], use Eval():
</CODE>
<HR />
</BLOCKQUOTE>
<P>私の意見では、これは読みにくいコードを作成するので、使用すべきではありません。値を返して使用してください。特定のインデックスだけが必要で、<STRONG>そのインデックスの数が分かっ</STRONG>ている場合は、リストを使用して残りを「捨てる」ことができます。</P>
<BR />
<PRE><CODE class=" language-jsl">Names Default To Here(1);
return_list = Function({}, {Default Local}, return({1,2,3}));
{res, _, _} = return_list();
show(res, _);
正しく割り当てる x=式(こんにちは) そして印刷します:
私の意見では、これはエラーになるはずです(現時点では予期しない動作だと思います)。これはGlueの動作(最後の結果を返してから評価する)によるものだと推測しています。
Names Default To Here(1);
Eval(
x = Expr(hello);
Print(x);
);<BR />// Eval(Glue(Assign(x, Expr(hello)), Print(x)));
vs (名前未解決: 'hello' のアクセスまたは評価での hello、hello/*###*/ )
Names Default To Here(1);
Eval(
x = Expr(hello);
);<BR />// Eval(Assign(x, Expr(hello)));
このような場合に Eval が使用されている場合は、常にこれが起こるはずだと感じます (Expr() を評価しようとする -> 評価に失敗する -> エラーをスローする)。 エヴァン・マコークル 。
もっと見る...
Names Default To Here(1);
a = 1;
Try(
Eval(
x = Expr(hello);
y = Expr(a);
);
,
Write("\!NFirst Example: ", exception_msg);
);
Try(
Eval(
y = Expr(a);
x = Expr(hello);
);
,
Write("\!Second Example: ", exception_msg);
);
変数にhello名だけを保存したい場合は、Name Expr()を使用します。
Names Default To Here(1);
x = NameExpr(hello);
スクリプト ガイド > プログラミング方法 > 高度な式、マクロ、リストこれにはいくつかの間違いがありますが、全体的には正しく、読みやすい内容です。
Re: 関数の戻り値のインデックス追加の例とご意見をありがとうございます。
Re: 関数の戻り値のインデックスああ、引数で定義された関数を取ると、物事ははるかに明確になります。
g=Function({x}, {1,2,3});
x=g()[1] // doesn't work (uses the function itself and takes the first element)
x=g("")[1] // works -> 1 (runs the function - then takes the first element)