如果
!Ember.isEmpty @get('a') #-> true
和
!Ember.isEmpty @get('b') #-> false
然后为什么
!Ember.isEmpty @get('a') and !Ember.isEmpty @get('b') #-> true
或者是我的CoffeeScript?
答案 0 :(得分:5)
您遇到的问题是Coffeescript优先级。您在javascript中的代码是:
!Ember.isEmpty(this.get('a') && !Ember.isEmpty(this.get('b')));
您需要添加parens以使操作顺序更明确:
!Ember.isEmpty(@get('a')) and !Ember.isEmpty(@get('b'))
所以在javascript中它是:
!Ember.isEmpty(this.get('a')) && !Ember.isEmpty(this.get('b'));
答案 1 :(得分:1)
.isEmpty
之后的所有内容都被解释为该函数调用的参数。如果这不是你想要的,你需要括号或组。
此外,为了清晰起见,您应该使用not
代替!
。
如果您只使用括号对呼叫及其参数进行分组,则会更清楚:
not Ember.isEmpty(@get 'a') and not Ember.isEmpty @get 'b'
甚至更清楚,虽然有点lispy
(not Ember.isEmpty @get 'a') and not Ember.isEmpty @get 'b'