Ruby:
การอ่านอาร์กิวเมนต์จากคำสั่งลำดับ
วิธีทำ:
ในการจับอาร์กิวเมนต์จากบรรทัดคำสั่ง Ruby มีอาร์เรย์ง่าย ๆ ให้ใช้: ARGV
มันประกอบด้วยอาร์กิวเมนต์ทั้งหมดที่ถูกส่งมาในลำดับที่ให้ไว้
# hello.rb
name = ARGV[0] || "World"
puts "Hello, #{name}!"
# รันด้วย: ruby hello.rb Alice
# ผลลัพธ์: Hello, Alice!
ในการจัดการกับอาร์กิวเมนต์หลายตัว:
# greet.rb
name, time_of_day = ARGV
puts "Good #{time_of_day || 'day'}, #{name || 'there'}!"
# รันด้วย: ruby greet.rb Bob Morning
# ผลลัพธ์: Good Morning, Bob!
สร้างตัวเลือกโดยใช้ลูป:
# options.rb
options = {}
ARGV.each do |arg|
key, value = arg.split('=')
options[key.to_sym] = value
end
p options
# รันด้วย: ruby options.rb name=Tom age=30
# ผลลัพธ์: {:name=>"Tom", :age=>"30"}
ลงลึก
การอ่านอาร์กิวเมนต์จากบรรทัดคำสั่งเป็นปฏิบัติการที่เก่าแก่เท่ากับอินเตอร์เฟซบรรทัดคำสั่งเอง มันเกี่ยวกับการใช้ประโยชน์จากการป้อนข้อมูลของผู้ใช้โดยไม่มี GUI—จำเป็นสำหรับการอัตโนมัติหรือเมื่อรันสคริปต์บนเซิร์ฟเวอร์
ARGV
ของ Ruby ไม่ใช่สิ่งที่แปลกใหม่; ภาษามากมายมีบางอย่างที่คล้ายคลึงกัน อย่างไรก็ตาม การดำเนินการของ Ruby นั้นเน้นที่ความเรียบง่ายและไวยากรณ์ที่ชัดเจน—ไม่มีความวุ่นวาย เพียงแค่อาร์เรย์
ใต้พื้นผิว, ARGV
เป็นเพียงอินสแตนซ์ของ Array
ที่เตรียมพร้อมด้วยอาร์กิวเมนต์ที่ปรากฏหลังชื่อสคริปต์ในการเรียกคำสั่ง Ruby ตั้งค่ามันขึ้นก่อนโค้ดของคุณถึงจะรัน ทำให้มันพร้อมใช้งานได้ทันที
มีทางเลือกหรือ? แน่นอน สำหรับความต้องการที่ซับซ้อน เช่น การแยกวิเคราะห์ธง (เช่น --verbose
หรือ -v
), Ruby มีคลาส OptionParser
ในไลบรารีมาตรฐาน นี่สามารถจัดการได้มากกว่า ARGV
เช่น ค่าเริ่มต้น การเปลี่ยนแปลงประเภทอัตโนมัติ และการสร้างข้อความช่วยเหลือ
บางครั้ง คุณอาจต้องการทราบว่ามีการให้อาร์กิวเมนต์หรือไม่ โดยไม่สนใจค่าของมัน สำหรับเรื่องนี้ ARGV.include?
ช่วยได้
อ่านเพิ่มเติม
- บทนำถึง
OptionParser
: https://ruby-doc.org/stdlib-2.7.0/libdoc/optparse/rdoc/OptionParser.html - เพิ่มเติมเกี่ยวกับอาร์กิวเมนต์บรรทัดคำสั่งใน Ruby: https://www.rubyguides.com/2018/12/ruby-argv/