coffee真的很简洁. 但是在函数参数和返回值这里还可以更简洁. 比如规定必须用键值对(对象)作为参数和返回值, 那么小括号和大括号都可以省略了.

IIFE
  • 用do就可以了.
双重循环生成扁平不重复数组
getpointpair= (e)->
#写法一	因为两重循环外层push内层结果, 所以需要flat
	({from: e[x], to: j} for x in [i+1...e.length] for j,i in e).flat()
#写法二 也可以自己弄一个数组作为返回结果
	res=[]
	for j,i in e
		res.push({from: e[x], to: j}) for x in [i+1...e.length]
	res
#和flat等价的写法, 这里xxx是一个数组
[].concat xxx...
判空运算符
zip = lottery.drawWinner?.address?.zipcode
zip = lottery.drawWinner ?.address ?.zipcode
# 这两个是不一样的. 有空格代表属性, 直接用null判断, 没有空格代表方法, 会用function类型判断
# 但是如果用在if里面必须没有空格
for x in p
		if x.E?
			siteshowinfo["点位"]=true
<>{ if p? then <Boxc text="点" onClick={show type:'point'}/>}</>
对象简写不可以省略大括号
  • CoffeeScript has a shortcut for creating objects when you want the key to be set with a variable of the same name. that the { and } are required for this shorthand.
  • why?
  • CoffeeScript shortcut key value same name. why { }
  • 因为多参数的判断问题. 本来coffe的实现时合理的. 架不住很多人提bug. 作者就修复了这个.
参考
  • https://coffeescript-cookbook.github.io/chapters/arrays/concatenating-arrays