发信人: scaret(方糖|似水流年|我是天蝎大使), 信区: WebDevelop
标 题: [JavaScript]使用throw的if-else的不完整替代
发信站: 饮水思源 (2013年02月02日13:11:08 星期六), 站内信件
昨天 fcfarseer 在Re: 这个帖子中说明了一个lambda和if的分支的区别,并说明了JavaScript语言本身的缺陷使得if-else替代遥不可及
然而虽然在 przhu 的警告[[Post:WebDevelop,M.1359736630.A|不要在实现正常用途的
时候借用异常机制]]下我仍然不死心地想要做出尝试.以下是我使用throw方案
function iff(tf,funcTrue,funcFalse){
switch(tf){
case true:
var result1 = funcTrue();
switch(result1){
case undefined:
return;
default:
throw result1;
}
break;
case false:
var result2 = funcFalse();
switch(result2){
case undefined:
return;
default:
throw result2;
}
break;
}
}
在使用时,不能简单使用一个iff(TF,funcT,funcF),而应该使用如下结构:
try{
iff(TF,funcT,funcF);
}
catch(e){
return e;
}
在这种if实现下,斐波那契数列的实现是:
function F(n){
try{
iff(n < 3,
function(){return 1;},
function(){return F(n-1) + F(n-2)}
);
}catch(e){
return e;
}
}
是可以正常工作的.
几点说明:
· 由于直接使用了try-catch,所以也就自然禁止了其他异常的使用,也覆盖了程序"实际
出错"的可能,这是我认为这个实现"不完全"的最大原因.
· 由于在具体使用iff时,iff之前和之后的代码段是固定的,而非随这个if是用于非递归
和递归而改变的,所以我认为这个实现是"不违反规则"的
· 另一个缺陷在于,iff内部定义的变量作用域与JavaScript本身的if-else不同.
※ 来源:·饮水思源 bbs.sjtu.edu.cn·[FROM: 114.92.222.44]
※ 修改:·scaret 于 2013年02月02日13:21:35 修改内容·[FROM: 114.92.222.44]
标 题: [JavaScript]使用throw的if-else的不完整替代
发信站: 饮水思源 (2013年02月02日13:11:08 星期六), 站内信件
昨天 fcfarseer 在Re: 这个帖子中说明了一个lambda和if的分支的区别,并说明了JavaScript语言本身的缺陷使得if-else替代遥不可及
然而虽然在 przhu 的警告[[Post:WebDevelop,M.1359736630.A|不要在实现正常用途的
时候借用异常机制]]下我仍然不死心地想要做出尝试.以下是我使用throw方案
function iff(tf,funcTrue,funcFalse){
switch(tf){
case true:
var result1 = funcTrue();
switch(result1){
case undefined:
return;
default:
throw result1;
}
break;
case false:
var result2 = funcFalse();
switch(result2){
case undefined:
return;
default:
throw result2;
}
break;
}
}
在使用时,不能简单使用一个iff(TF,funcT,funcF),而应该使用如下结构:
try{
iff(TF,funcT,funcF);
}
catch(e){
return e;
}
在这种if实现下,斐波那契数列的实现是:
function F(n){
try{
iff(n < 3,
function(){return 1;},
function(){return F(n-1) + F(n-2)}
);
}catch(e){
return e;
}
}
是可以正常工作的.
几点说明:
· 由于直接使用了try-catch,所以也就自然禁止了其他异常的使用,也覆盖了程序"实际
出错"的可能,这是我认为这个实现"不完全"的最大原因.
· 由于在具体使用iff时,iff之前和之后的代码段是固定的,而非随这个if是用于非递归
和递归而改变的,所以我认为这个实现是"不违反规则"的
· 另一个缺陷在于,iff内部定义的变量作用域与JavaScript本身的if-else不同.
※ 来源:·饮水思源 bbs.sjtu.edu.cn·[FROM: 114.92.222.44]
※ 修改:·scaret 于 2013年02月02日13:21:35 修改内容·[FROM: 114.92.222.44]
No comments:
Post a Comment