初学者:重复 while 循环和错误

Jon*_*Jon 1 applescript

好的,所以不确定 apple.stackexchange 是否是一个更好的地方,但我需要一些有关此代码的帮助:

目标:要求用户输入循环应重复的次数。如果他们以错误的格式输入,请发送反馈

问题如果我输入一个小数,它只是把它当作一个整数并且仍然有效,我该如何防止这种情况,或者用另一种方式检查它?

set correctEntry to false --initially assume false
repeat while correctEntry is false
    --Let user put how many times it loops
    set textToDisplay to "How often should this repeat?"
    display dialog textToDisplay default answer "2.4"
    set reps to text returned of the result
    --Detailed check/feedback if they input wrong
    try
        --Begins as string, try making it an integer
        set reps to reps as integer --coercion will should only work with integer
        set correctEntry to true --remember won't get here if first statement fails
    on error
        try
            --See if string can at least be converted to a number
            set reps to reps as number
            display dialog "Only integers"
        on error
            display dialog "That wasn't a number"
        end try
        -- still false here
    end try
end repeat
--Only gets here if correctEntry becomes true
repeat reps times
    say "You entered right"
end repeat
Run Code Online (Sandbox Code Playgroud)

另外,要检查是否输入了负数,我会使用

if reps > 0
    set reps to reps as integer
    set correctEntry to true
else
    display dialog "Must be positive"
Run Code Online (Sandbox Code Playgroud)

有没有更好的办法?即使是内置的“积极”电话?

最后,我使用http://www.fischer-bayern.de/as/as4as/AS4AS_e.pdf作为教程,但我不确定它是否足够好。我正在考虑去 Mac OS X 开发人员库,但想要一些关于学习的好方法的输入。我只有一点 Perl 经验,所以它不一定适合一个完整的初学者。

更新:找到这个网站:http : //www.macosxautomation.com/training/applescript/intro.html

非常感谢您提供的任何帮助。

Update2:如果我在第二个 try 块中对整数使用相同的检查,则代码有效,第一个有什么问题。为什么它将所有内容都视为整数?更重要的是,为什么在我的脚本中使用建议的 if 语句不起作用?

reg*_*633 5

尝试这个...

repeat
    set textToDisplay to "How often should this repeat?"
    set reps to text returned of (display dialog textToDisplay default answer "2.4")

    try
        set reps to reps as number -- this makes sure no letters were entered
        if (class of reps) is integer and reps is greater than 0 then
            exit repeat
        else
            error "Only positive integers"
        end if
    on error theError number errorNumber
        display dialog "There was an error: " & (errorNumber as text) & return & return & theError buttons {"OK"} default button 1 with icon stop
    end try
end repeat

repeat reps times
    say "You entered right"
end repeat
Run Code Online (Sandbox Code Playgroud)

为了学习这里的一些教程。当我学习时,我做了“脚本初学者教程”部分中的那些。随着您的进步,还有更多高级教程。最后,您还必须学习 AppleScript 编辑器中“帮助”菜单下的“Applescript 语言指南”。