比较Applescript错误中的变量?

时间:2017-02-12 11:01:01

标签: variables applescript

我有一个程序可以检查所选位置的文件数,然后显示它们。但是,当我试图将其纳入另一个程序时,它就会出错。最初它起作用但现在它说的是真实的东西是假的。

set variable1 to do shell script "cd /Volumes; ls | wc -l"
display dialog variable1

这是原始程序,它告诉我卷文件夹中的文件数量是3。

set variable1 to do shell script "cd /Volumes; ls | wc -l"
variable1 = 3

但后来我尝试将其纳入我的新程序,它告诉我这是假的??? ???

如果可以,请帮助我,因为这令人非常沮丧。任何帮助都很棒,并提前感谢!:)

1 个答案:

答案 0 :(得分:2)

像AppleScript这样的语言对于数据类型(即数据的表示方式而不是实际意义的机制)是愚蠢的迂腐。 do shell script命令返回类型text(又名stringUnicode text)的值,但第二行会将其与类型integer的值进行比较:< / p>

"3" = 3

在一个理智,人性化的世界中,这种比较会返回true因为你意味着什么是显而易见的。唉,编程世界远非理智而且很少人性化,需要一定程度的迂腐,以减少大多数人的早期挫败感。在这种情况下,在尝试比较这两个值之前,必须确保两者都是相同(或等效)类型。例如,如果要执行数字比较:

set variable1 to (do shell script "cd /Volumes; ls | wc -l") as integer
variable1 = 3

AppleScript在这里引起了双重困惑,因为有时候它会自动执行转换(强制转换),而有时它则不会,在这种情况下你必须使用它的at运算符来自己显式转换(强制转换)值。< / p>

...

哦,AppleScript执行数字比较的规则与执行文本比较的规则不同,所以即使在它将有助于&#34;有帮助的情况下也是如此。为你强​​迫你需要对你正在使用的值的类型保持警惕,否则你很容易被更狡猾和令人困惑的错误所困扰。

例如:

34 > 5 --> true

第一次测试按预期返回true,因为数字34大于数字5.

"34" > "5" --> false (?)

文本比较逐个字符地比较两个文本值,因此第二个测试返回false,因为&#34; 3&#34;来自之前,而不是之后,&#34; 5&#34;。

此外,与is-equal(=)和is-not-equal()运算符不同,>< ,并且运算符在比较它们之前将它们的操作数强制转换为相同的类型:

34 > "5" --> true

"34" > 5 --> false

在这两种情况下,操作符将其右操作数强制转换为与其左操作数相同的类型,然后根据数字(在第一种情况下)或文本(在第二种情况下)规则进行比较。这种行为可能被礼貌地描述为语言设计缺陷或“哇哇”。

如果您甚至不确定左操作数将是什么类型的值,但是想要确保使用正确的规则集进行比较,请首先对其应用相应的强制:

(variable1 as number) > 5

(variable1 as text) > "5"