Цикл в сценарии кофе? - PullRequest
       2

Цикл в сценарии кофе?

0 голосов
/ 13 января 2012

Я перевожу кусок кода из javascript в coffeescript.

  for (var i = 0, len = keys.length; i < len; i++) {
    k = keys[i];
    if (!mailOptions.hasOwnProperty(k))
      mailOptions[k] = app.set('mailOptions')[k]
  }

Понятия не имею, как к нему подойти, и на сайте doc нет ясности, может кто-нибудь дать мне четкое объяснение?большое спасибо!

Ответы [ 2 ]

4 голосов
/ 13 января 2012
for key in keys
  if not mailOptions.hasOwnProperty key
    mailOptions[key] = (app.set 'mailOptions')[key]

Или в стиле охраны:

for key in keys when not mailOptions.hasOwnProperty key
  mailOptions[key] = (app.set 'mailOptions')[key]

Компилируется в:

var key, _i, _len;

for (_i = 0, _len = keys.length; _i < _len; _i++) {
  key = keys[_i];
  if (!mailOptions.hasOwnProperty(key)) {
    mailOptions[key] = (app.set('mailOptions'))[key];
  }
}
1 голос
/ 13 января 2012

Вот один из способов (отсюда: http://js2coffee.org/):

i = 0
len = keys.length

while i < len
  k = keys[i]
  mailOptions[k] = app.set("mailOptions")[k]  unless mailOptions.hasOwnProperty(k)
  i++

Но я бы так не поступил. Я бы просто сделал:

for k in keys
  mailOptions[k] = app.set("mailOptions")[k] unless mailOptions.hasOwnProperty k

Это выводит следующее (исключая var, которое также выводит):

for (_i = 0, _len = keys.length; _i < _len; _i++) {
  k = keys[_i];
  if (!mailOptions.hasOwnProperty(k)) {
    mailOptions[k] = app.set("mailOptions")[k];
  }
}

Или, если вы хотите быть изощренным, что я не советую в этой ситуации, так как это жертвует некоторой читабельностью:

(mailOptions[k] = app.set("mailOptions")[k] unless mailOptions.hasOwnProperty k) for k in keys
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...