การอ่านอาร์กิวเมนต์จากคำสั่งลำดับ

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? ช่วยได้

อ่านเพิ่มเติม