2015-02-21 5 views
0

Я пробую свою руку в Applescript и не вижу ничего плохого в этом. Ошибка, которую я получаю:Ошибка Applescript «не может закончиться»

Ошибка «Не могу получить конец {button return: \" OK \ ", текст возвращается: \" 3 \ "}." номер -1728 от последней точки вставки {кнопки вернулся: «OK», текст возвращается: «3»}

Это мой код:

beep 
set counter to 0 
set tempX to 0 
set temp to 0 
set counting to 0 
set stored to {0} 
set input to "How many grades do you wish to enter?" as string 
set str to display dialog input buttons {"NEXT"} default button "NEXT" default answer "" 
repeat text returned of str times 
    counting = counting + 1 
    set grades to display dialog "GRADES: " default answer "" 
    set stored to grades 
end repeat 
set rep to the length of stored 
repeat rep times 
    counter = counter + 1 
    set tempX to the ((end of stored) - counter) as number 
    set temp to temp + tempX 
end repeat 
set ln to the length of grades 
set average to temp/ln 
if text returned of str is 1 then 
    say "The Average of your grade is " & average using "Zarvox" 
else 
    say "The Average of your grades is " & average using "Zarvox" 
end if 
get "AVERAGE: " & average 

ответ

1

Итак, прежде чем я начну: я настоятельно рекомендую что вы научитесь использовать интерфейс Javascript для Apple Events, а не язык Applescript. Applescript действительно странный язык, и его причуды в значительной степени уникальны; обучение это будет разочаровывать, и не поможет вам изучать другие языки.

Это, как говорится, давайте погрузимся в код:

set stored to {0} 

Это начнет вас с одного сорта, который всегда присутствует и устанавливается в ноль. Вы, вероятно, хотите, чтобы просто инициализировать это пустой список:

set stored to {} 

Следующая:

set grades to display dialog "GRADES: " default answer "" 

Это устанавливает grades к объекта результата, а не просто ответ. То, что вы, вероятно, хотите здесь на самом деле text returned результата: (. Это то, что создает действительно странный вид объекта в сообщении об ошибке)

set grades to text returned of (display dialog "GRADES: " default answer "") 


Далее вы перезаписать stored с этот результат:

set stored to grades 

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

set stored to stored & {grades} 

Наконец, есть некоторые логические проблемы с вашим усреднением; вы добавляете end of stored (т. е. последний вход класса) в переменную temp каждый раз. Гораздо более простой подход был бы:

set temp to 0 
repeat with n in stored 
    set temp to temp + n 
end repeat 
set average to sum/(count of stored) 

С учетом этих изменений все сделал, ваш скрипт должен работать правильно.

+0

Большое вам спасибо. Я провел прошлое, как 4 часа разочарованы этим. Я никогда раньше не видел этого «повторять с n». Но все равно, большое спасибо. – Andyo98

+0

Я просто хочу добавить одну вещь, и это то, что любое слово, которое появляется в синем, является ключевым словом и не может использоваться как имя переменной. Ваше использование ln, становится синим на моей машине.Способ исправить это - изменить имя курса, но вы также можете написать его так: '| ln |', чтобы сообщить интерпретатору, что это ваша переменная. Я также рекомендую вам скачать и немного прочитать в Руководстве по языку AppleScript. (Бесплатно) – McUsr

+0

@McUsr: Это, конечно, спорное, для чистого макинтош, не имея всех видов произвольных osaxen и скрипт библиотек установлен 'ln' может быть использован должным образом без необходимости труб вокруг них. Или, по крайней мере, сказать, какой коммерческий osax вызывает проблему. Теперь комментарий более или менее бессмыслен –