Как разрешить конфликт терминологии? - PullRequest
1 голос
/ 30 марта 2012

Apple Mail определяет класс account и константу account для свойства rule type условия правила.Компилятор Applescript всегда разрешает это столкновение термина «учетная запись» с классом, делая невозможным выполнение каких-либо действий с условиями правил, которые соответствуют учетным записям.

При наличии такого конфликта, как я могу указать константувместо имени класса?Существует ли синтаксис двойного угла для перечисляемых констант?Есть ли решение, которое работает для коллизий любого типа терминов (не только классов и перечислений)?

Примеры

Создание условия правила "Account"

Цельследующий нерабочий пример - создание условия правила, которое будет соответствовать учетной записи.

tell application "Mail"
    set rool to make new rule at end of rules with properties {name:"test", enabled:false}
    (* the following ends up creating an 'any recipient' condition, as 'account'
       is «class mact»
     *)
    make new rule condition at end of rule conditions of rool with properties {rule type:account, expression:"Some Account"}
    log rule type of last rule condition of rool
    -- result: any recipient

    (* inspecting the event for the following, «class tacc» produces the proper
       record, ({'rtype':'tacc'}), but the rule condition is still an 'any recipient'
     *)
    make new rule condition at end of rule conditions of rool with properties {rule:«class tacc», expression:"Some Account"}
    log rule type of last rule condition of rool
    -- result: any recipient
end tell

Сравнение

Цель следующего - проверить, имеет ли условие правила тип правила account.Для этого сначала создайте в настройках Mail.app правило «Учетная запись» с одним условием, соответствующим какой-либо учетной записи.

tell application "Mail"
    set acctType to rule type of first rule condition of rule "Account"
    log acctType is account
    -- result: false
    log acctType is «class tacc»
    -- result: false
end tell

Мой предыдущий вопрос " Как получить доступ к свойству, которое имеетто же имя, что и у класса, но другой код события?"похож, но охватывает только конфликты между именами классов и свойств.Более того, решение для него (с использованием «класса ...») работает для свойств, но не для других типов столкновений.

Ответы [ 2 ]

2 голосов
/ 30 марта 2012

Одним из обходных путей является определение переменной типа учетной записи, ссылающейся на константу перечисления вне блока tell application "Mail":

set theAccountType to «constant eruttacc»
tell application "Mail"
    set rool to make new rule at end of rules with properties {name:"test", enabled:false}
    set theCond to make new rule condition at end of rule conditions of rool with properties {rule type:theAccountType, expression:"Some Account"}
    properties of theCond
end tell

См. Также Ссылка на необработанный код , котораяпоказывает необработанные формы кода «class ...», «constant ...» и «event ...».

1 голос
/ 30 марта 2012

Поэкспериментировав с вашим кодом некоторое время, я не вижу никакого решения - эта двусмысленность имени кажется упущением со стороны Apple.

Однако существует простой обходной путь:тип правила, который вам нужен из существующего правила («пустышка»).

-- "dummy" was created manually to copy rule types from
set rtype to (rule type of last rule condition of rule "dummy")

set rool to make new rule at end of rules with properties {name:"test", enabled:false}
set rcond to make new rule condition at end of rule conditions of rool with properties {rule type:rtype, expression:"~/Library/Mail/IMAP-john.doe@example.com"}

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