Applescript: Değişkenin dizeyle karşılaştırılması başarısız oluyor


11

Ben bir öğeler listesi alır ve sonra onlar üzerinde tekrarlar bir applecript var:

tell application "GeekTool Helper"
    set names to name of geeklets

    repeat with currentName in names
        if (currentName is equal to "Top_CPU_Processes") then
            display dialog "found it"
        end if
        return currentName
    end repeat
end tell

namesDeğişken düzgün dize dizisi olarak ayarlanmış olur. Listeyi tekrarladığımda, currentNamedeğişkenlerin her birinin ayrı ayrı döndürülmesini sağlayabiliyorum.

Karşılaştığım sorun if ifadesidir. Asla ekranın "bulduğu" iletişim kutusunu almıyorum.

Ben de karşılaştırmayı denedim if (currentName = "Top_CPU_Processes") thenve hala gerçek olarak değerlendirmez.

Değişkenin içeriğinin dizeye göre değerlendirilmesi için yapmam gereken bir şey var mı?

Yanıtlar:


10

Bir değişkenler diziniz / diziniz olduğunda ve bunlar üzerinde yinelendiğinizde (yinelediğinizde), her bir öğeye (adların 1 öğesi gibi) başvuru alırsınız. Başka bir deyişle, değeri doğrudan almazsınız, dizideki öğeye bir işaretçi alırsınız. Karşılaştırmak için öğe referansını gerçek değerine zorlamanız gerekir.

Deneyin: ((string olarak currentName) "Top_CPU_Processes) 'e eşitse

Ayrıca, Komut Dosyası Hata Ayıklayıcısı kullanıyorsanız, komut dosyasında neler olduğunu görmek çok daha kolaydır, Applescript Düzenleyicisi'nden çok daha iyi hata ayıklama özelliğine sahiptir.


Harika, bunu belirttiğin için teşekkürler. Ayrıca, iyi bir nokta yeniden: ekran iletişim kutusu vs dönüş paneli kullanma. Bunu çoğunlukla yapıyordum çünkü sonuç paneline yanlış yazdırdığımı düşündüm return "found it"çünkü hiç basılmadı. Geri döneceğim return.
Chris Schmitz

Ayrıca, referansı zorlamak yerine referanstan vazgeçebilirsiniz ( contentsözelliğini isteyebilirsiniz ): contents of currentName is equal to …Bkz. ASLG referenceveya a reference to.
Chris Johnsen

as stringOperatörü kullanmak, yaşadığım sorunu çözdü
redolent
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.