coffee为什么每次都会生成 return语句
发布于 11 年前 作者 firefox 4296 次预览 最后一次回复是 11 年前 来自 问答
alert(
try
nonexistent / undefined
catch error
"And the error is ... #{error}"
)
# 如果我不想在 catch 语句中出现 return 怎么处理?
# 为什么它每次都会在代码块的最后一句生成 return ?
var error;
alert((function() {
try {
return nonexistent / void 0;
} catch (_error) {
error = _error;
return "And the error is ... " + error;
}
})());
7 回复
在结束的地方加一句 return,就不会生成return了
@thondery 谢谢,这样写但感觉有点别扭,不知有没更好的方式?
函数式风格的编程语言就是这样,它们的函数都会返回最后那个值,ruby 和 lisp 也这样。
@alsotang 函数式语言每个语句都有一个值没错,但不只是最后一句返回一个值。但是生成每次最后一句都是 return 语句,比如在 try 语句 return ,catch 也有一个 return ,finally 也生成一个 return。这样如果运行时出错,逻辑不就很容易混乱,所以我才产生这个疑问?
@firefox 目前没有遇到这种问题,在我担心会return出现错误的时候,我会手动加上return,实际上并没有验证如果不加会不会出错。
@think2011 我现在也是打算这样写,只让它出现一次 return :
可以看一下这个issue的讨论:https://github.com/jashkenas/coffeescript/issues/2477
jashkenas大神明确表示不会改变这个行为,CS的理念是
expression-oriented的,即任何代码片段都应该是一个有意义的expression,绝大部分情况下默认的return都不会造成任何问题,不用管就是了。甚至有人已经提了很有意思的PR,也被拒绝了 https://github.com/jashkenas/coffeescript/pull/2726 ,jashkenas的拒绝理由:这种理念对强迫症患者来说会觉得很别扭,可实际上一旦接受了这种设定,还觉得挺带感的……
有个回复我非常认同,CS不是JS的一个Wrapper,而是JS Runtime上的另一门不同的,并且更好的语言。所以不要去纠结生成的JS代码了,按CS本身提供的语法、语义和编程理念来写代码,能写出更优雅的代码,而且能得到更好的编程思维
对于你这个问题,这些return只要不造成影响,不要管就是了