แก้ไข: กรุณาโปรด , โปรดอ่านสองความต้องการที่ด้านล่างของโพสต์นี้ก่อนที่จะตอบ ผู้คนมักจะโพสต์อัญมณีและไลบรารีใหม่ของตนและสิ่งที่ไม่เป็นไปตามข้อกำหนดอย่างชัดเจน
บางครั้งฉันต้องการแฮ็กตัวเลือกบรรทัดคำสั่งบางตัวในสคริปต์ง่ายๆ วิธีที่สนุกโดยไม่ต้องจัดการกับ getopts หรือการแยกวิเคราะห์หรืออะไรทำนองนั้นคือ:
...
$quiet = ARGV.delete('-d')
$interactive = ARGV.delete('-i')
...
# Deal with ARGV as usual here, maybe using ARGF or whatever.
ไม่ใช่ไวยากรณ์ตัวเลือก Unix ปกติเพราะจะยอมรับพารามิเตอร์บรรทัดคำสั่งที่ไม่ใช่ตัวเลือกเช่นเดียวกับใน " myprog -i foo bar -q
" แต่ฉันสามารถอยู่กับสิ่งนั้นได้ (บางคนเช่นนักพัฒนาที่ถูกโค่นล้มชอบสิ่งนี้บางครั้งฉันก็ทำเกินไป)
ตัวเลือกที่มีอยู่หรือไม่มีอยู่ไม่สามารถนำไปใช้งานได้ง่ายกว่าที่กล่าวมา (การกำหนดหนึ่งการเรียกใช้ฟังก์ชันหนึ่งผลข้างเคียง) มีวิธีที่ง่ายพอ ๆ กันในการจัดการกับตัวเลือกที่ใช้พารามิเตอร์เช่น " -f
ชื่อไฟล์ " หรือไม่
แก้ไข:
จุดหนึ่งที่ฉันไม่ได้ทำไว้ก่อนหน้านี้เพราะมันไม่ชัดเจนสำหรับฉันจนกระทั่งผู้เขียน Trollop กล่าวว่าไลบรารีพอดี "ในไฟล์ [800 บรรทัด] เดียว" คือฉันไม่เพียง แต่ต้องการความสะอาดเท่านั้น ไวยากรณ์ แต่สำหรับเทคนิคที่มีลักษณะดังต่อไปนี้:
รหัสทั้งหมดสามารถรวมอยู่ในไฟล์สคริปต์ (โดยไม่ต้องใช้สคริปต์จริงซึ่งอาจมีเพียงสองสามบรรทัด) เพื่อให้สามารถวางไฟล์เดียวใน
bin
dir บนระบบใดก็ได้ที่มี Ruby 1.8 มาตรฐาน . [5-7] การติดตั้งและใช้งาน หากคุณไม่สามารถเขียนสคริปต์ Ruby ที่ไม่มีคำสั่งที่ต้องการและในกรณีที่รหัสสำหรับแยกวิเคราะห์ตัวเลือกสองสามตัวเลือกนั้นอยู่ภายใต้บรรทัดไม่เกินหนึ่งโหลแสดงว่าคุณทำตามข้อกำหนดนี้ไม่สำเร็จโค้ดมีขนาดเล็กและเรียบง่ายพอที่จะจำได้มากพอที่จะพิมพ์โค้ดโดยตรงที่จะทำเคล็ดลับแทนที่จะตัดและวางจากที่อื่น ลองนึกถึงสถานการณ์ที่คุณอยู่บนคอนโซลของเซิร์ฟเวอร์ที่ติดไฟและไม่สามารถเข้าถึงอินเทอร์เน็ตได้และคุณต้องการรวบรวมสคริปต์ด่วนเพื่อให้ไคลเอ็นต์ใช้ ฉันไม่รู้เกี่ยวกับคุณ แต่ (นอกเหนือจากการทำตามข้อกำหนดข้างต้นไม่สำเร็จ) การจำแม้กระทั่ง 45 บรรทัดของ micro-optparse อย่างง่ายก็ไม่ใช่สิ่งที่ฉันสนใจที่จะทำ
getoptlong
และoptparse
อยู่ในไลบรารีทับทิมมาตรฐานดังนั้นคุณจึงไม่จำเป็นต้องคัดลอกเมื่อปรับใช้สคริปต์ของคุณ - หากทับทิมทำงานบนเครื่องนั้นrequire 'optparse'
หรือrequire 'getoptlong'
จะทำงานด้วย