對函數的回傳值進行索引今天的挑戰:
f=Function({}, {1,2,3});
tmp=f();
y=tmp[1]; // works
x=f()[1] // doesn't work
理解這個問題對理解 JSL 的工作原理非常有幫助 
自動化和腳本編寫回覆:對函數的回傳值進行索引逆問題:
names default to here(1);
x=1;
Eval(x=1); // "does the same"
x= Expr(hello);
Eval(x= Expr(hello)); // fails
回覆:對函數的回傳值進行索引Head 是否對其論點進行評估?
關於assign 函數,它會評估其參數嗎?
1. 參數:否
2. 參數:是
如果需要「手動」計算表達式的值(在從結果中取出第一個元素之前),請使用 Eval() 函數:
x=f()[1] // doesn't work
x=Eval(f())[1] // works
關於膠水:
是否需要參數:是
……以及 Eval:
是的當然!
除此之外,在對參數進行第一次求值之後,也會對回傳值進行一次額外的求值*)。
Eval(print(1);x= Expr(hello);print(x); Expr(print(2)));
正確地將x=Expr(hello)賦值給變量,並印出:

*) -> 連結/文件/社群?
回覆:對函數的回傳值進行索引
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=Expr(hello) 以及印刷品:
我認為這應該會導致錯誤(目前我認為這是一種意料之外的行為)。我猜這是因為 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() 的值 -> 計算失敗 -> 拋出錯誤)。 @EvanMcCorkle
看更多......
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」名稱儲存在變數中,請使用 NameExpr() 函數。
Names Default To Here(1);
x = NameExpr(hello);
腳本編寫指南 > 程式設計方法 > 高階表達式、巨集和清單雖然有一些錯誤,但總體來說是正確的,值得一讀。
回覆:對函數的回傳值進行索引感謝您提供的補充範例和您的想法。
回覆:對函數的回傳值進行索引啊,當我們考慮一個有參數的函數時,事情就變得清晰多了:
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)