2013-02-10 45 views
0
set randomString to "this is a random string" 

出於某種原因變量的行爲在不同的重複循環

set firstWord to the first word of randomString 
set isThereTruth to firstWord = "this" 
display dialog isThereTruth 

返回true,但

repeat with x in words of randomString 
    display dialog x 
    set isThisTruth to x = "this" 
    display dialog isThisTruth 
end repeat 

返回false

我很新的AppleScript的愚蠢非常抱歉問題,但是很難找到答案,也可能是其他人遇到了這個問題。

我試過測試,以確保(儘管我無法想象爲什麼它不會)變量是一個字符串,但我非常確定我的方法來測試爲什麼變量類型變量不是'真的有用。

回答

0

當你構建你的重複循環時,那麼x只是對這個單詞的引用(類似於內存指針)。而「x的引用」,指向x在內存中的位置的指針,並不等於「this」。要從參考中獲得實際的單詞,您必須獲取它的「內容」。所以使用,這將工作像您期望...

repeat with x in words of randomString 
    display dialog (contents of x) 
    set isThisTruth to (contents of x = "this") 
    display dialog isThisTruth as text 
end repeat 

寫你的重複循環,所以你在第一時間獲得實際價值的另一種方法是這樣的。所以要麼會工作。

repeat with i from 1 to count of words of randomString 
    set x to item i of (words of randomString) 
    display dialog x 
    set isThisTruth to x = "this" 
    display dialog isThisTruth as text 
end repeat 

請注意,「顯示對話框」僅顯示字符串。它不能顯示布爾值,數字等。只有字符串。當你「顯示對話框isThisTruth」時,這樣的applescript正在修復代碼中的錯誤。它強制isThisTruth爲一個字符串,然後顯示它。

這就是爲什麼當您在重複循環中使用「顯示對話框x」時,它會顯示正確的單詞。它將「對x的引用」強制爲一個字符串,然後將其顯示出來。

注:我解釋參考的方式是我如何看待它們。它並不是那樣工作,但我更容易以這種方式思考它們,結果是一樣的。如果你想了解更多關於他們here's a link

+0

非常感謝!我知道顯示對話框只是向我顯示強制信息,但我不知道確保變量是字符串,布爾值還是整數。我知道我是否離開布爾測試即。 「x =」這個「」並且在劇本結束時將它留在底部的顯示中,但是有什麼方法可以獲得這些信息而不會在劇本末尾留下這個詞? – user2030695 2013-02-10 17:03:21

+0

在腳本結尾處使用... return anyVariable。無論你在哪裏使用「返回」,腳本都會在那裏結束並返回你指定的任何變量。 「幫助你調試程序的更好方法是」登錄「。您可以在代碼中的任何位置登錄anyVariable。要查看腳本中發生的日誌消息和其他事情,請查看applescript的底部。您會在結果部分看到您選擇了一個名爲「Result」的按鈕。不過還有2個其他按鈕。嘗試一下,看看你得到了什麼。要麼會顯示你的日誌消息。 – regulus6633 2013-02-10 17:26:28

+0

此外,您可以強制變量,如我在代碼中顯示的,例如isThisTruth作爲文本。 「作爲文本」強制文本。因此,只要有意義,您可以使用「任何事物」來強制一種類型。 – regulus6633 2013-02-10 17:35:12