Как я могу получить доступ к свойству с тем же именем, что и класс, но с другим кодом события? - PullRequest
3 голосов
/ 29 января 2012

Когда приложение использует одно и то же имя для класса и свойства, но разные коды событий, и я пытаюсь использовать свойство в спецификаторе объекта, AppleScript интерпретирует идентификатор как класс, а не свойство.Например:

tell application "Mail"
    header of first rule condition of first rule
end

Это приводит к ошибке:

Почта получила ошибку: Не удается получить заголовок условия правила 1 правила 1.

Стиль header в AppleScript Editor (синий курсив) предполагает, что это имя класса, а не свойство.Как указать, что идентификатор является свойством, и разрешить это конфликт имен явно?

Я использую OS X 10.6.8 и Mail.app 4.5.

Не работающее решение

В " Applescript: полное руководство " Мэтт Нойберг предлагает использовать its:

Ключевое слово it необходимо, когда приложение определилосвойство с тем же именем, что и класс.[...] высказывание its устраняет неоднозначность.

Однако это не решает проблему в моем примере кода выше.После добавления its, header все еще стилизован как класс, и сценарий приводит к той же ошибке.

tell application "Mail"
    its header of first rule condition of first rule
end

Применение примера из § 20.8.3.«Свойства с одноименными классами» приводят к тому же результату.

tell application "Mail"
    tell first rule
        tell first rule condition
            get its header
        end tell
    end tell
end tell

Фон

Я пытаюсь написать AppleScript, чтобы расширить условия правила Mail.app для поддержки сопоставления с образцом.Некоторые условия правила в одном из этих расширенных правил должны содержать информацию для сценария, такую ​​как шаблон для сопоставления и действие, которое нужно выполнить, если шаблон соответствует, а не условия, которым должен соответствовать Mail.Я хотел бы использовать свойство header для этих условий правила.

Альтернативные способы расширения правил для обеспечения соответствия шаблонам хороши, но не запрашиваются.Я все еще хотел бы получить ответ на конкретный вопрос, поскольку проблема может возникнуть в случаях, отличных от этого конкретного использования.

Ответы [ 2 ]

3 голосов
/ 29 января 2012

Редактировать: я смог заставить его потерпеть неудачу, как вы описали, выполнив некоторую перестановку.Редактор сценариев, кажется, блокируется в соответствии с его первым предположением, поэтому одним из решений будет использование run script для использования необработанного класса во время выполнения, например:

tell application "Mail"
    header of (get properties of first rule condition of first rule) -- fails
end tell

set myHeader to (run script "tell application \"Mail\"
    return «class rhed» of (get properties of first rule condition of first rule)
end tell")
myHeader --> success
0 голосов
/ 29 января 2012

Из комментария к "Applescript et Mail.app, bug ou c'est moi" , свойство header имеет код события, отличный от класса (для свойства свойство "rhed", "МХДР "для класса).Похоже, что это и фактическая причина ошибки (header компилируется в «class mhdr») и предлагает потенциальное решение: вы можете использовать необработанный указатель кода события, чтобы получить свойство в данном конкретном случае.

Однако при первом сохранении сценария необработанный код заменяется именем, а при втором сохранении имени повторно интерпретируется как класс, а не свойство, что требует исправления каждого вхожденияИмя свойства каждый раз, когда вы сохраняете.Объем выполняемой работы можно уменьшить, определив обработчик для получения свойства вне блока, в котором используются термины Mail.app.

on hdr(rc)
    return «property rhed» of rc
end hdr
tell application "Mail"
    my hdr(first rule condition of first rule)
end

Путем определения обработчика в местоположении, где находится Mail.термины приложения не используются, необработанный код не будет заменен идентификатором.

Это только частично решает проблему сохранения и редактирования, поскольку каждое отдельное свойство требует своего собственного обработчика и (что еще хуже) обработчиков.не работают в формах фильтра (хотя вместо этого можно использовать циклы).Таким образом, я не могу принять этот ответ и был бы признателен за полное решение, если кто-то сможет его найти.Например, следующее

on hdr(rc)
    return «property rhed» of rc
end hdr
tell application "Mail"
    every rule condition of first rule where my hdr(it) is not ""
end

приводит к:

error "Mail получил ошибку: Can't get header."номер -1728 из заголовка

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...