在CoffeeScript中,如何将variables用作散列中的键?
例如:

所以:
foo = "asdf" {foo: "bar"} eval foo # how do I get {"asdf": "bar"} ? # this will throw parse error: {(eval foo): "bar"} 这是一个简单的语法问题:我如何让CoffeeScriptdynamic地构造一个哈希,而不是手工完成?
对于将来会发现这个问题的任何人,从CoffeeScript 1.9.1插入的对象字面键都被支持!
语法如下所示:
 myObject = a: 1 "#{ 1 + 2 }": 3 
见https://github.com/jashkenas/coffeescript/commit/76c076db555c9ac7c325c3b285cd74644a9bf0d2
 你为什么使用eval ? 你可以像在JavaScript中一样完成它: 
 foo = 'asdf' h = { } h[foo] = 'bar' 
这意味着这个JavaScript:
 var foo, h; foo = 'asdf'; h = {}; h[foo] = 'bar'; 
 结果是h看起来像{'asdf': 'bar'} 。 
像JavaScript一样,CoffeeScript不允许使用expression式/variables作为对象文字中的关键字。 这是短暂的支持,但在0.9.6版本中被删除。 创build对象后需要设置属性。
 foo = 'asdf' x = {} x[foo] = 'bar' alert x.asdf # Displays 'bar' 
有点难看,但却是单线(抱歉迟到):
 { "#{foo}": bar } 
 如果您正在寻找使用Coffeescript的最小语法来定义您的关联数组,我build议创build一个简单的两行方法来将variable name键转换为variables值,然后再定义数组。 
下面是我如何做(实际数组要大得多):
 @sampleEvents = session_started: K_TYPE: 'session_started' K_ACTIVITY_ID: 'activity' session_ended: K_TYPE: 'session_ended' question_answered: K_TYPE: 'question_answered' K_QUESTION: '1 + 3 = ' K_STUDENT_A: '3' K_CORRECT_A: '4' #optional K_CORRECTNESS: 1 #optional K_SECONDS: 10 #optional K_DIFFICULTY: 4 #optional for k, event of @sampleEvents for key, value of event delete event[key] event[eval(key.toString())] = value 
  SampleEvents数组现在是: 
 { session_started: { t: 'session_started', aid: 'activity', time: 1347777946.554, sid: 1 }, session_ended: { t: 'session_ended', time: 1347777946.554, sid: 1 }, question_answered: { t: 'question_answered', q: '1 + 3 = ', sa: '3', ca: '4', c: 1, sec: 10, d: 4, time: 1347777946.554, sid: 1 }, 
尝试这个:
 foo = "asdf" eval "var x = {#{foo}: 'bar'}" alert(x.asdf)