за и против различных режимов проверки правописания в emacs

Для производственного кода, требующего большой совместимости с клиентскими браузерами, я все еще предлагаю, чтобы ответ Ivan Nevostruev выше с контейнером удостоверился Object.keys в более старых браузерах. Однако возможно получить точную функциональность, которую требуют с помощью ECMA, нового defineProperty функция.

С ECMAScript 5 - Object.defineProperty

С ECMA5 можно использовать Object.defineProperty() для определения несчетных свойств. текущая совместимость все еще имеет много для желания, но это должно в конечном счете стать применимым во всех браузерах. (Конкретно отметьте текущую несовместимость с IE8!)

Object.defineProperty(Object.prototype, 'keys', {
  value: function keys() {
    var keys = [];
    for(var i in this) if (this.hasOwnProperty(i)) {
      keys.push(i);
    }
    return keys;
  },
  enumerable: false
});

var o = {
    'a': 1,
    'b': 2
}

for (var k in o) {
    console.log(k, o[k])
}

console.log(o.keys())

# OUTPUT
# > a 1
# > b 2
# > ["a", "b"]

Однако, так как ECMA5 уже добавил Object.keys, Вы могли бы также использовать:

Object.defineProperty(Object.prototype, 'keys', {
  value: function keys() {
    return Object.keys(this);
  },
  enumerable: false
});

Исходный ответ

Object.prototype.keys = function ()
{
  var keys = [];
  for(var i in this) if (this.hasOwnProperty(i))
  {
    keys.push(i);
  }
  return keys;
}

Редактирование: , Так как этот ответ был вокруг некоторое время, я оставлю вышеупомянутое нетронутым. Любой читающий это должен также прочитать ответ Ivan Nevostruev ниже.

нет никакого способа сделать функции прототипа несчетными, который всегда приводит к ним поднимающийся в для - в циклах, которые не используют hasOwnProperty. Я все еще думаю, что этот ответ был бы идеален, если расширение прототипа Объекта не было так грязно.

12
задан Yoo 8 November 2009 в 17:22
поделиться

1 ответ

Вы можете использовать частичный режим flyspell несколькими способами. Один из них - использовать многорежимный подход, когда вы определяете несколько режимов в одном буфере, один из которых является режимом редактирования комментариев (например), в котором включен режим flyspell. Раньше я делал это для какого-то языка программирования, но я больше не могу найти для него конфигурацию, поэтому, думаю, я больше не использую этот язык. Во всяком случае, см. mmm-mode для получения дополнительной информации.

Вторая альтернатива - использовать `flyspell-prog-mode '(который см.), Который устанавливает режим flyspell для определенных частей буфера, определенных в данном случае - по начертанию шрифта (есть определенные начертания для строк и комментариев для большинства основных режимов языка программирования). Он использует функцию обратного вызова предиката, которая может быть определена как угодно; Поддерживаю ТНТ, который является режимом AIM для Emacs, и мы используем его так:

(defun tnt-im-mode-flyspell-verify ()
  "This function is used for `flyspell-generic-check-word-p' in TNT."
  (not (get-text-property (point) 'read-only)))

(put 'tnt-im-mode 'flyspell-mode-predicate 'tnt-im-mode-flyspell-verify)
(put 'tnt-chat-mode 'flyspell-mode-predicate 'tnt-im-mode-flyspell-verify)

Что касается flyspell vs. speck vs. wcheck - я использовал только режим flyspell. speck, кажется, очень ориентирован на то, что доступно для просмотра, что может быть хорошо, но обычно я хочу, чтобы весь документ, над которым я работаю, был проверен на орфографию, поэтому я бы не хотел этого. wcheck выглядит как общий интерфейс для внешней программы; Я предполагаю, что вам придется самостоятельно наращивать его использование. flyspell можно использовать двумя разными способами: as-you-type, как я обычно его использую, и «пакетный режим», когда сразу проверяется вся область или буфер. Первый из них невероятно быстр, и я никогда не находил причины искать лучший инструмент. Последнее может быть немного медленным, особенно когда есть много слов с ошибками и документ большой, но я действительно могу » Не помните, что ожидал его завершения более 15 секунд. Если смотреть на экран в течение 15 секунд и ничего не делать, может показаться, что это долгое время, на самом деле это не так. YMMV, конечно.

Итог: я бы придерживался режима flyspell, если, конечно, он отвечает вашим потребностям.

6
ответ дан 2 December 2019 в 23:20
поделиться
Другие вопросы по тегам:

Похожие вопросы: