Как исправить неопределенную переменную в моей программе? - PullRequest
1 голос
/ 17 июня 2019

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

Переменная numberOne не определена.

Я знаю, что это значит, но я не знаю, почему это не определено.Может кто-нибудь помочь с этим?

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

on variableValue()
    set numberOne to text returned of (display dialog "Variable One:" default answer "" with icon note buttons {"Cancel", "Continue"} default button 2 with title "Random Number Generator 3") as string
    set numberTwo to text returned of (display dialog "Variable Two:" default answer "" with icon note buttons {"Cancel", "Continue"} default button 2 with title "Random Number Generator 3") as string
    set numberThree to text returned of (display dialog "Variable Three:" default answer "" with icon note buttons {"Cancel", "Continue"} default button 2 with title "Random Number Generator 3") as string
    set numberFour to text returned of (display dialog "Variable Four:" default answer "" with icon note buttons {"Cancel", "Continue"} default button 2 with title "Random Number Generator 3") as string
    set numberFive to text returned of (display dialog "Variable Five:" default answer "" with icon note buttons {"Cancel", "Continue"} default button 2 with title "Random Number Generator 3") as string
    set useSameValues to button returned of (display alert "Use same values?" message "If you re-generate a new number, do you want to use the same values?" as critical buttons {"Cancel", "No", "Yes"} default button 3)
    if useSameValues = "No" then
        set useSameValuesTwo to "false"
    else if useSameValues = "Yes" then
        set useSameValuesTwo to "true"
    end if
end variableValue
variableValue()
on randomNumber()
    -- The line of code just beneath this text is where the error shows up (This is my first program that utilizes handlers, so something could be wrong there).
    set numberSix to (numberOne + numberTwo + numberThree + numberFour + numberFive)
    set numberSeven to (numberSix * (random number from 1 to (random number from 2 to 100)))
    set possibleValueOne to (random number from 1 to 5)
    if possibleValueOne = 1 then
        set numberEight to (numberSeven - numberOne)
    else if possibleValueOne = 2 then
        set numberEight to (numberSeven - numberTwo)
    else if possibleValueOne = 3 then
        set numberEight to (numberSeven - numberThree)
    else if possibleValueOne = 4 then
        set numberEight to (numberSeven - numberFour)
    else if possibleValueOne = 5 then
        set numberEight to (numberSeven - numberFive)
    end if
    set numberNine to (numberEight - 100000)
end randomNumber
randomNumber()

1 Ответ

1 голос
/ 17 июня 2019

В AppleScript (как и в большинстве языков) переменные имеют scope , в которой объявленный идентификатор распознается в любом данном объекте скрипта. Переменные, объявленные внутри обработчика, являются локальными для этого обработчика и не существуют вне его, поэтому вам нужно будет предоставить некоторые средства, чтобы сделать их доступными в другом месте. Есть несколько способов сделать это, например, объявить глобальные переменные или properties , или иметь обработчик, возвращающий значения вызывающей стороне.

В вашем примере переменные, объявленные в вашем обработчике variableValue(), недоступны вне обработчика, поэтому, вероятно, было бы проще всего просто объявить эти переменные как global , например, добавив следующее объявление в начале вашего скрипта:

global numberOne, numberTwo, numberThree, numberFour, numberFIve
...