变量在重复循环中表现不同

时间:2013-02-10 06:32:13

标签: applescript

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

我对applecript很新,很抱歉这个愚蠢的问题,但是很难找到答案,也许其他人遇到了这个问题。

我试过测试以确保(虽然我无法想象为什么它不会)变量是一个字符串,但我很确定我的方法来测试变量变量的类型不是真的很有效。

1 个答案:

答案 0 :(得分: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正在修复代码中的错误。它将theThisTruth强制转换为字符串,然后显示它。

这就是为什么当您在重复循环中使用“显示对话框x”时,它会显示正确的单词。它将“引用x”强制转换为字符串,然后显示它。

注意:我解释参考文献的方式是我如何看待它们。它并不完全正常,但我更容易以这种方式思考它们,结果是一样的。如果您想了解更多相关信息here's a link