请教一些 CoffeeScript 的问题

2014-08-01 10:38:01 +08:00
 taoche
CoffeeScript这个语法糖,使用起来感觉挺不错,特别是写面向对象,class有了类的感觉。但是用于生产环境的时候发现有一些问题,请教一下大家。

1: CoffeeScript可以写 函数声明吗? 根据CoffeeScript的文档,CoffeeScript只有函数表达式的写法。这种写法有执行上下文。调用必须在定义的下面,感觉不是很方便。

2:CoffeeScript 会自动在函数体内 return最后一句。。为了不让它return,只能自己写一句return true 感觉很傻很浪费。
4883 次点击
所在节点    程序员
31 条回复
yangff
2014-08-01 10:43:03 +08:00
你可以写一个0的。。
taoche
2014-08-01 11:08:23 +08:00
@yangff 这。。。
datou552211
2014-08-01 11:16:33 +08:00
return挺好的啊,不仅返回值的时候需要它。还可以观察函数执行情况
taoche
2014-08-01 11:46:27 +08:00
@datou552211 自己忘记写return了 就容易出错
7anshuai
2014-08-01 11:55:28 +08:00
@taoche
可以直接内嵌JS的函数声明代码
abc()
`function abc(){}`
但是推荐用函数表达式
orancho
2014-08-01 12:05:51 +08:00
“自动在函数体内return最后一句”是从Ruby继承的
taoche
2014-08-01 12:06:58 +08:00
@orancho 这个不是说不好,而是和js的思想有点不一样。
taoche
2014-08-01 12:09:52 +08:00
@7anshuai 感谢,'' 确实是一个解决办法。
用函数表达式,比较严谨。但是声明比较灵活。 经过这段时间的书写,感觉函数表达式可读性更强一些。
和python 依赖模块 需要先import requirejs的amd模块也推荐的是先定义。
lsj5031
2014-08-01 12:27:48 +08:00
第一個問題沒怎麼看懂,我猜 do 是不是滿足要求?
第二個問題如果不想返回值留個空 return 就好了呀,自動 return 出錯的場景暫時沒見過。
linux 下用的 rime, 繁體見諒。
taoche
2014-08-01 12:32:10 +08:00
@lsj5031 感谢回复。 我试了一下do 并不是函数声明的方式。
第二个问题,空return是可以在编译的时候被过滤。
zythum
2014-08-01 12:32:20 +08:00
@lsj5031
lz的意思是
coffee 只能是 var noop = function () {}
lz需要 function noop () {}
orancho
2014-08-01 12:34:22 +08:00
@orancho coffee本来就是Ruby社区的产物,初版解释器都是Ruby写的。某个Ruby程序员写js写烦了然后就写出了Ruby。 历史原因。
zythum
2014-08-01 12:34:44 +08:00
朱一看来coffee 最大的问题是 t/97426, 对于不会js,不知道coffee编译规则的很容易出现这种看上去顾名思义的问题。其他感觉都不是问题。
zythum
2014-08-01 12:35:31 +08:00
抱歉 忘记加空格了 t/97426
zythum
2014-08-01 12:36:03 +08:00
http://www.v2ex.com/t/125564 ...难道我忘记站内url跳转规则了?
mcfog
2014-08-01 12:41:18 +08:00
个人认为coffee最大的问题是局部变量和外层的变量不能同名

不过包括楼主说那几个问题,在coffee的两个比较大的分支里都有解决方案

https://github.com/satyr/coco
https://github.com/gkz/LiveScript/
lsj5031
2014-08-01 12:54:48 +08:00
@zythum
啊,謝謝。明白了……
imcotton
2014-08-01 12:55:27 +08:00
声明绝对局部变量可以采用 IIFE 的方式

a = 1
b = 2

do ({a, b} = {}) ->
a = 3
b = 4
imcotton
2014-08-01 12:56:04 +08:00
a = 1
b = 2

do ({a, b} = {}) ->
a = 3
b = 4
imcotton
2014-08-01 13:00:07 +08:00
自己脑补上面最后两行的缩进吧

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/125564

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX