程式設計的科學/Sway演示/物件/示例5
外觀
這是一個使用典型 Sway 語法的 switch。
var x = 0;
switch (x)
{
case(3) { println("greater"); }
case(2) { println("equal"); }
else { println("less"); }
}
為了實現 *switch*,我們首先定義 *case* 函式,以防它被過濾。
function case(operand,$action,$)
{
list(operand,$action,$);
}
請記住,過濾器依次處理每個語句,正如我們在過濾 *pop* 時所見,單行函式最適合過濾。
*switch* 的策略
- 建立一個過濾器,使 switch 表示式在範圍內
- 讓過濾器丟擲 **success** 異常
- 將過濾器附加到 *case*
- 執行 switch 的主體,尋找成功
function switch(expr,$actions)
{
var result;
function caseFilter(spec)
{
var val;
if (expr == spec[0])
{
throw(:success,force(spec[1]));
}
else if (spec[2] != :null)
{
throw(:success,force(spec[2][0]));
}
}
case . filter = caseFilter;
result = catch(force($actions));
if (error?(result))
{
if(result . type == :success,result . value,throw(result));
}
else
{
:null;
}
}