Applescript: การเปรียบเทียบตัวแปรกับสตริงล้มเหลว


11

ฉันมีแอปพลิเคชันที่ได้รับรายการแล้วจึงวนซ้ำ:

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

namesตัวแปรได้รับการตั้งค่าให้อาร์เรย์ของสตริงอย่างถูกต้อง เมื่อฉันทำซ้ำในรายการฉันสามารถรับแต่ละcurrentNameตัวแปรที่ส่งคืนแยกกันโดยไม่มีปัญหา

ปัญหาที่ฉันพบคือคำสั่ง if ฉันไม่เคยได้รับกล่องโต้ตอบที่แสดงว่า "พบ"

ฉันลองเปรียบเทียบif (currentName = "Top_CPU_Processes") thenด้วยและก็ยังไม่เคยประเมินว่าเป็นจริง

มีสิ่งที่ฉันต้องทำเพื่อให้เนื้อหาของตัวแปรประเมินกับสตริงหรือไม่

คำตอบ:


10

เมื่อคุณมีรายการ / อาเรย์ของตัวแปรและคุณย้ำ (ซ้ำ) เหนือพวกเขาคุณจะได้รับการอ้างอิงถึงแต่ละรายการ - เช่น "รายการ 1 ของชื่อ" คุณไม่ได้รับค่าโดยตรงคุณจะได้รับตัวชี้ไปยังรายการในอาร์เรย์ คุณต้องบีบบังคับการอ้างอิงรายการกับมูลค่าที่แท้จริงเพื่อเปรียบเทียบ

ลอง: ถ้า ((currentName เป็นสตริง) เท่ากับ "Top_CPU_Processes) จากนั้น

นอกจากนี้หากคุณใช้ Script Debugger มันง่ายกว่าที่จะเห็นว่าเกิดอะไรขึ้นกับสคริปต์มันมีความสามารถในการดีบักได้ดีกว่า Applescript Editor


เยี่ยมมากขอบคุณที่ชี้ให้เห็น นอกจากนี้จุดที่ดีอีกครั้ง: การใช้แผงควบคุมกลับกับกล่องโต้ตอบการแสดงผล ส่วนใหญ่ฉันทำเช่นนั้นเพราะฉันคิดว่าฉันกำลังพิมพ์ไปยังแผงผลลัพธ์อย่างไม่ถูกต้องด้วยreturn "found it"เพราะไม่เคยพิมพ์ returnฉันจะกลับไป
Chris Schmitz

นอกจากนี้แทนการบีบบังคับอ้างอิงคุณก็สามารถ dereference มัน (ขอของcontentsทรัพย์สิน): contents of currentName is equal to …ดู ASLG บนหรือreference a reference to
Chris Johnsen

การใช้as stringโอเปอเรเตอร์แก้ไขปัญหาที่ฉันมี
redolent
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.