Hallo!
Es ist kein Bug. Erklären kann ich es nicht, aber umreissen:
Grußset myList to {1, 2, 3, 4}
repeat with zahl in myList
log zahl
--> Achtung: die Loop Variable "zahl" ist eine Referenz auf ein ITEM in der Liste
--um das zu zeigen:
set x to zahl
--> Ergebniss: item 4 of {1, 2, 3, 4} (im Ergebniss steht immer das letzte item der Liste)
--> also quasi:
set i to (item 3 of myList)
--und deshalb:
if item zahl of myList = 3 then display dialog "klappt"
--oder man nimmt "contents":
if contents of zahl = 3 then display dialog "klappt"
--> denn "contents" setzt die Variable "zahl" auf den WERT!
-- soweit erst mal dazu……
--------------------------------------------------
try
if zahl ≥ "drei" then display dialog "klappt"
on error theError
log theError
end try
--> error: "drei" kann nicht in Typ number umgewandelt werden
--> die Operanden (*) müssen aus der GLEICHEN Klasse sein
--> aber im Gegensatz zu "=" versucht AppleScript, die Operanden in die gleiche Klasse zu wandeln
--> und deshalb auch:
if zahl = 3 then display dialog "klappt"
--> kein Fehler, da bei "=" die Operanden aus beliebigen Klassen stammen können.
--> aber auch kein Ergebniss, siehe oben
----------------------------------
--Abschliessend und nur um es im Ergebniss-Fenster zu zeigen, noch mal:
set x to zahl
end repeat
--(*) Operand … das Wort musste ich mir erst mal ergoogeln * grins
Ergebnis 1 bis 5 von 5
- 06.02.2012, 14:38 #1Boskoop
Themenstarter
- Registriert
- 07.2010
- Beiträge
- 41
"if" in "repeat with" Problem oder Bug?
Hallo,
scripte gerade was mit applescript, habe aber folgendes Problem. Wieso wird im folgenden Code, nie die Dialogbox ausgegeben?
arbeite ich mit einem Vergleich funktioniert es, zB:Code:repeat with zahl in {1, 2, 3, 4} if zahl = 4 then display dialog "klappt" buttons {"OK"} default button 1 end if end repeat
und ohne "repeat" funktioniert es auch:Code:repeat with zahl in {1, 2, 3, 4} if zahl ≥ 4 then display dialog "klappt" buttons {"OK"} default button 1 end if end repeat
Code:set zahl to 4 if zahl = 4 then display dialog "klappt" buttons {"OK"} default button 1 end if
Ist das nen Bug oder denke ich hier völlig falsch?
- 07.02.2012, 01:59 #2
- 07.02.2012, 11:07 #3Boskoop
Themenstarter
- Registriert
- 07.2010
- Beiträge
- 41
Die automatische Datentyp konvertierung scheint hier einfach zu hapern, hab es jetzt mit einem
in der Schleife gelöst. Find ich dann noch recht Übersichtlich.Code:set zahl to zahl as integer
- 07.02.2012, 11:33 #4
Ich bin nicht sicher, ob das mit dem "hapern" so stimmt.
Meiner Meinung nach findet die bei einem "Ist-Gleich"-Operator einfach nicht statt.
(Wie ich vorsichtig in meinem Beispiel angemerkt habe)
Deine Lösung geht hier, scheitert aber bei einer Liste wie
set myList to {1, "zwei", 3, 4}
besser ist
contents of zahl
GrußGeändert von sedna (07.02.2012 um 12:01 Uhr)
- 09.02.2012, 11:45 #5Code:
repeat with zahl from 1 to 4 if zahl = 4 then display dialog "klappt" buttons {"OK"} default button 1 end if end repeat repeat with zahl in {1, "zwo", 3, 4} repeat 1 times -- möchtegern continue try if zahl as integer = 4 then display dialog "klappt auch" buttons {"OK"} default button 1 end if end try end repeat end repeat repeat with zahl in {1, "zwo", 3, 4} if (contents of zahl) = 4 then display dialog "klappt ebenfalls" buttons {"OK"} default button 1 end if end repeatThe cause of the problem is:
Don't worry; it's been deprecated.
The new one is worse.


Zitieren
