跳转到内容

编程的科学/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;
           }
       }

下一步 上一步 顶部

华夏公益教科书