Ergebnis 1 bis 5 von 5
  1. #1
    Boskoop
    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?

    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
    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:
    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?

  2. #2
    Luxemburger Triumph Avatar von sedna
    Registriert
    10.2008
    Beiträge
    498
    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ß

  3. #3
    Boskoop
    Themenstarter

    Registriert
    07.2010
    Beiträge
    41
    Die automatische Datentyp konvertierung scheint hier einfach zu hapern, hab es jetzt mit einem
    Code:
    set zahl to zahl as integer
    in der Schleife gelöst. Find ich dann noch recht Übersichtlich.

  4. #4
    Luxemburger Triumph Avatar von sedna
    Registriert
    10.2008
    Beiträge
    498
    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)

  5. #5
    Galloway Pepping Avatar von fyysh
    Registriert
    01.2010
    Ort
    Rheinknie
    Alter
    33
    Beiträge
    1.347
    Code:
    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 repeat
    
    The cause of the problem is:
    Don't worry; it's been deprecated.
    The new one is worse.

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •