• Apfeltalk ändert einen Teil seiner Allgemeinen Geschäftsbedingungen (AGB), das Löschen von Useraccounts betreffend.
    Näheres könnt Ihr hier nachlesen: AGB-Änderung
  • Wir haben den Frühjahrsputz beendet, Ihr auch? Welches Foto zu dem Thema hat Euch dann am Besten gefallen? Hier geht es lang zur Abstimmung --> Klick

"if" in "repeat with" Problem oder Bug?

timsch

Boskoop
Registriert
14.07.10
Beiträge
40
Hallo,

scripte gerade was mit applescript, habe aber folgendes Problem. Wieso wird im folgenden Code, nie die Dialogbox ausgegeben?

Code:
[B]repeat[/B] [B]with[/B] [COLOR=#1e9700]zahl[/COLOR] [B]in[/B] {1, 2, 3, 4}	
	[B]if[/B] [COLOR=#1e9700]zahl[/COLOR] [B]=[/B] 4 [B]then[/B]
[COLOR=#2a00c1][COLOR=#000000]		[/COLOR][B]display dialog[/B][COLOR=#000000] "klappt" [/COLOR]buttons[COLOR=#000000] {"OK"} [/COLOR]default button[COLOR=#000000] 1[/COLOR][/COLOR]
	[B]end[/B] [B]if[/B]
	
[B]end[/B] [B]repeat[/B]

arbeite ich mit einem Vergleich funktioniert es, zB:

Code:
[B]repeat[/B] [B]with[/B] [COLOR=#1e9700]zahl[/COLOR] [B]in[/B] {1, 2, 3, 4}	
	[B]if[/B] [COLOR=#1e9700]zahl [/COLOR]≥ 4 [B]then[/B]
[COLOR=#2a00c1][COLOR=#000000]		[/COLOR][B]display dialog[/B][COLOR=#000000] "klappt" [/COLOR]buttons[COLOR=#000000] {"OK"} [/COLOR]default button[COLOR=#000000] 1[/COLOR][/COLOR]
	[B]end[/B] [B]if[/B]
	
[B]end[/B] [B]repeat[/B]

und ohne "repeat" funktioniert es auch:

Code:
[B]set[/B] [COLOR=#1E9700]zahl[/COLOR] [B]to[/B] 4	
	[B]if[/B] [COLOR=#1E9700]zahl =[/COLOR] 4 [B]then[/B]
[COLOR=#2A00C1][COLOR=#000000]		[/COLOR][B]display dialog[/B][COLOR=#000000] "klappt" [/COLOR]buttons[COLOR=#000000] {"OK"} [/COLOR]default button[COLOR=#000000] 1[/COLOR][/COLOR]
	[B]end[/B] [B]if[/B]



Ist das nen Bug oder denke ich hier völlig falsch?
 

sedna

Galloway Pepping
Registriert
22.10.08
Beiträge
1.359
Hallo!

Es ist kein Bug. Erklären kann ich es nicht, aber umreissen:


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

Gruß
 

timsch

Boskoop
Registriert
14.07.10
Beiträge
40
Die automatische Datentyp konvertierung scheint hier einfach zu hapern, hab es jetzt mit einem
Code:
[B]set[/B] [COLOR=#1e9700]zahl[/COLOR] [B]to[/B] [COLOR=#1e9700]zahl[/COLOR] [B]as[/B] [COLOR=#4100ff][I]integer[/I][/COLOR]
in der Schleife gelöst. Find ich dann noch recht Übersichtlich.
 

sedna

Galloway Pepping
Registriert
22.10.08
Beiträge
1.359
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ß
 
Zuletzt bearbeitet:

fyysh

Schweizer Glockenapfel
Registriert
25.01.10
Beiträge
1.386
Code:
[B]repeat [/B][B]with[/B] zahl [B]from[/B] 1 [B]to[/B] 4
    [B]if[/B] zahl = 4 [B]then[/B]
        [B]display dialog[/B] "klappt" buttons {"OK"} default button 1
    [B]end[/B] [B]if[/B]
[B]end[/B] [B]repeat[/B]


[B]repeat[/B] [B]with[/B] zahl [B]in[/B] {1, "zwo", 3, 4}
    [B]repeat[/B] 1 [B]times[/B] -- möchtegern continue
        [B]try[/B]
            [B]if[/B] zahl [B]as[/B] [I]integer[/I] = 4 [B]then[/B]
                [B]display dialog[/B] "klappt auch" buttons {"OK"} default button 1
            [B]end[/B] [B]if[/B]
        [B]end[/B] [B]try[/B]
    [B]end[/B] [B]repeat[/B]
[B]end[/B] [B]repeat[/B]


[B]repeat[/B] [B]with[/B] zahl [B]in[/B] {1, "zwo", 3, 4}
    [B]if[/B] (contents [B]of[/B] zahl) = 4 [B]then[/B]
        [B]display dialog[/B] "klappt ebenfalls" buttons {"OK"} default button 1
    [B]end[/B] [B]if[/B]
    
[B]end[/B] [B]repeat
[/B]