ใน AppleScript ฉันจะโทร / ใช้รูทีนย่อยซ้ำจาก AppleScript อื่นได้อย่างไร


2

ตัวอย่าง 1a

on removeText(searchText, sourceText)
set prevTIDs to text item delimiters of AppleScript
set text item delimiters of AppleScript to searchText
set sourceText to text items of sourceText

set text item delimiters of AppleScript to ""
set sourceText to "" & sourceText
set text item delimiters of AppleScript to prevTIDs

return sourceText
end removeText

ตัวอย่าง 2a

on removeText(searchText, sourceText)
set prevTIDs to text item delimiters of AppleScript
set text item delimiters of AppleScript to searchText
set sourceText to text items of sourceText

set text item delimiters of AppleScript to ""
set sourceText to "" & sourceText
set text item delimiters of AppleScript to prevTIDs

return sourceText
end removeText

set theSentence to "I love Windows and I will always love Windows."
set theSentence to removeText("Windows", theSentence)

ฉันพบรูทีนย่อยนี้ (snippet 1a) มีประโยชน์ใน snippet 2a และต้องการนำมาใช้ซ้ำโดยเรียกชื่อ ฉันไปเพื่ออะไร จากนั้นฉันบันทึกเกร็ดเล็กเกร็ดน้อย 1a เป็น /Users/henry/Library/Script\ Libraries/text.scpt และในส่วนย่อย 2a ฉันแทนที่

ตัวอย่าง 1b

on removeText(searchText, sourceText)
set prevTIDs to text item delimiters of AppleScript
set text item delimiters of AppleScript to searchText
set sourceText to text items of sourceText

set text item delimiters of AppleScript to ""
set sourceText to "" & sourceText
set text item delimiters of AppleScript to prevTIDs

return sourceText
end removeText

กับ

ตัวอย่าง 3

use script "text"

และได้รับ ตัวอย่าง 2b และจากนั้นฉันก็วิ่งตัวอย่าง 2b แต่ฉันพบข้อผิดพลาด «script» doesn’t understand the “removeText” message.

การอ้างอิง: "use statement" (อ้างอิงถึงส่วนที่พบโดยการค้นหา use script "Happy Fun Ball" ใน https://developer.apple.com/library/mac/documentation/applescript/conceptual/applescriptlangguide/reference/ASLR_control_statements.html )

ดังนั้นฉันกลับไปที่ google และพบว่ามีคนแนะนำว่าฉันควรบันทึกตัวอย่าง 1a เป็น "แอปพลิเคชันสคริปต์"

การอ้างอิง 2: ที่ด้านล่างของ https://developer.apple.com/library/mac/documentation/applescript/conceptual/applescriptlangguide/conceptual/ASLR_about_handlers.html

ในตัวอย่างนั้นมัน

ตัวอย่าง 4

tell application "NonStayOpen"
launch
stringTest("Some example text.")
end tell

ดังนั้นฉันจึงส่งออกตัวอย่างข้อมูล 1a เป็น /Users/henry/Library/Script\ Libraries/text.app และเขียนตัวอย่าง 2c

ตัวอย่าง 2c

tell application "text"
launch
set theSentence to "I love Windows and I will always love Windows."
set theSentence to removeText("Windows", theSentence)
end tell

จากนั้นฉันก็วิ่งออกมา {} doesn't match the parameters {searchText, sourceText} for removeText.

หลังจากนั้นฉันได้ลองต่อท้ายก่อน removeText(searchText, sourceText) เพื่อตัวอย่าง 1a (การรับ ตัวอย่าง 1c ) และส่งออกเพื่อแทนที่ /Users/henry/Library/Script\ Libraries/text.app แต่มีข้อผิดพลาดเมื่อทำงานล้มเหลว

ประการที่สองเพื่อแทนที่ removeText(searchText, sourceText) กับ removeText() ในตัวอย่าง 1a (การรับ ตัวอย่าง 1d ) และส่งออกเพื่อแทนที่ /Users/henry/Library/Script\ Libraries/text.app แต่ได้รับข้อผิดพลาดเมื่อทำงานล้มเหลว

ในข้อมูลโค้ด 2a ฉันจะโทร / นำรูทีนย่อยกลับมาใช้ซ้ำ (ตัวอย่างข้อมูล 1a) จาก AppleScript หรือ "แอปพลิเคชันสคริปต์" (ดูที่การอ้างอิง 2)


โปรดอย่าข้ามโพสต์ :) หากคุณไม่ได้รับคำตอบที่ต้องการจาก SU ขอให้ผู้ดำเนินการโยกย้ายแทนการโพสต์คำถามใหม่ด้วยตัวเอง
grg

คุณสามารถรับความช่วยเหลือจาก Applescript ได้ดีกว่าในไซต์แม่ทั้งหมด macscripter.net
Chris Paveglio

คำตอบ:


2

บันทึกสิ่งนี้เป็น text.scpt ใน ไลบรารีสคริปต์ โฟลเดอร์

on removeText(searchText, sourceText)
    set {TID, text item delimiters} to {text item delimiters, searchText}
    set sourceText to text items of sourceText
    set text item delimiters of AppleScript to ""
    set sourceText to sourceText as text
    set text item delimiters to TID
    return sourceText
end removeText

เรียกว่าเป็นอย่างนี้ในสคริปต์อื่น:

set theSentence to "I love Windows and I will always love Windows."
tell script "text" to set theSentence to removeText("Windows", theSentence)
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.