Простой итератор Apple Automator не работает (с использованием AppleScript) - почему?

Я пытаюсь сделать самую простую вещь в мире - простой итератор в Automator. Рабочий процесс идет:

Получить значение переменной (изначально установлено 1)

Запустить Applescript:

on run {input, parameters}
    set input to input + 1
    return input
end run

Установить значение переменной

Петля

Он работает в первый раз, переходя от 1 к 2, как и ожидалось. Но это не удается на втором проходе, что дает ошибку

Не удается превратить {} в номер типа. (-1700)

Я не знаю, почему - я пытался заставить его выводить из Applescript как целое число, и это не имеет значения. Кто-нибудь может пролить свет?


person Nick    schedule 06.04.2013    source источник
comment
Вы не показываете, как вы зацикливаете этот код, поэтому трудно определить, где возникает ваша проблема, однако легко определить, что происходит, по ошибке. Где-то в вашем вводном коде цикла становится список, потому что ваша ошибка показывает вам {}. Таким образом, на входе вашего первого цикла есть число, а на входе второго цикла - список. Поэтому вам следует исправить это или показать больше кода, чтобы мы могли найти проблему.   -  person regulus6633    schedule 07.04.2013
comment
Извините, я зацикливаю его с помощью функции Automator Loop после Set Value of a Variable. Он настроен на автоматический цикл с использованием исходного ввода (это не имеет значения, поскольку мы уже переопределили переменную, я думаю?).   -  person Nick    schedule 07.04.2013
comment
То же самое. Я просто не могу понять, почему то, что должно быть таким простым, становится таким трудным (невозможным?). Похоже, решения нет. (Решение ниже не работает - рабочий процесс просто продолжает запрашивать ввод пользователя, что делает все это бессмысленным)   -  person MikeyB    schedule 08.11.2016


Ответы (1)


Ваша ошибка связана с тем, что во втором цикле вашего рабочего процесса ваш applescript не получает никаких входных данных. Я бы предположил, что ваша функция цикла не получает никаких входных данных и, следовательно, ничего не передает обратно в applescript. Все, что находится между вашим applescript и функцией цикла, должно как-то мешать.

В качестве альтернативы попробуйте это как свой applescript. Рабочий процесс вашего автомата должен иметь только 2 действия: этот код applescript и действие цикла, установленное на «использовать текущие результаты ...».

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

Удачи.

on run {input, parameters}
    if input is {} then
        display dialog "Enter a number" default answer "1"
        set input to (text returned of result) as number
    else
        set input to input + 1
    end if
    return input
end run
person regulus6633    schedule 06.04.2013
comment
Регулус, спасибо за этот ответ. На самом деле я сделал это по-другому, написав все это на AppleScript и не заморачивался с циклом Automator. Но из любопытства я просто проделал это с исходной задачей, и это сработало, так что это должно было решить мою исходную проблему. Спасибо за ваше время. - person Nick; 15.04.2013