ฉันต้องการเขียนโปรแกรม A + B ง่ายๆใน Ruby แต่ฉันไม่รู้ว่าจะทำงานกับคอนโซลอย่างไร
ฉันต้องการเขียนโปรแกรม A + B ง่ายๆใน Ruby แต่ฉันไม่รู้ว่าจะทำงานกับคอนโซลอย่างไร
คำตอบ:
คุณกำลังพูดถึงgets
?
puts "Enter A"
a = gets.chomp
puts "Enter B"
b = gets.chomp
c = a.to_i + b.to_i
puts c
อะไรแบบนั้น?
Kernel.gets
พยายามอ่านพารามิเตอร์ที่พบในARGV
และขอให้คอนโซลหากไม่ARGV
พบ เพื่อบังคับให้อ่านจากคอนโซลแม้ว่าARGV
จะไม่ได้ใช้งานเปล่าก็ตามSTDIN.gets
Kernel.gets
พยายามอ่านไฟล์ที่พบARGV
และขอให้คอนโซลหากไม่ARGV
พบเท่านั้น เพื่อบังคับให้อ่านจากคอนโซลแม้ว่าARGV
จะไม่ได้ใช้งานเปล่าSTDIN.gets
ก็ตาม
a.to_i
และb.to_i
น่าจะดีกว่านี้
gets
ปิดกั้น? ถ้าไม่มีมีอะไรทดแทนที่ปิดกั้นหรือไม่?
คุณยังสามารถส่งผ่านพารามิเตอร์ผ่านบรรทัดคำสั่ง อาร์กิวเมนต์บรรทัดคำสั่งคือที่เก็บในอาร์เรย์ ARGV ดังนั้น ARGV [0] คือหมายเลขแรกและ ARGV [1] หมายเลขที่สอง
#!/usr/bin/ruby
first_number = ARGV[0].to_i
second_number = ARGV[1].to_i
puts first_number + second_number
และคุณเรียกแบบนี้
% ./plus.rb 5 6
==> 11
มีหลายวิธีในการรับข้อมูลจากผู้ใช้ ส่วนตัวชอบใช้วิธี gets เมื่อคุณใช้ gets จะได้รับสตริง ที่คุณพิมพ์และรวมถึงคีย์ENTERที่คุณกดเพื่อสิ้นสุดการป้อนข้อมูลของคุณ
name = gets
"mukesh\n"
คุณสามารถดูสิ่งนี้ได้ในirb ; พิมพ์สิ่งนี้และคุณจะเห็น \ n ซึ่งเป็นอักขระ "newline" ที่ปุ่ม ENTER สร้างขึ้น: พิมพ์
name = gets
คุณจะเห็นบางครั้งเช่น"mukesh\n"
คุณสามารถกำจัดอักขระขึ้นบรรทัดใหม่ที่น่ารำคาญโดยใช้วิธีchomp
วิธี chomp ช่วยให้คุณกลับสตริง แต่ไม่มีการยุติการขึ้นบรรทัดใหม่ ผู้ช่วยชีวิตวิธีการ chomp ที่สวยงาม
name = gets.chomp
"mukesh"
คุณยังสามารถใช้เทอร์มินัลเพื่ออ่านอินพุต ARGVเป็นค่าคงที่ที่กำหนดไว้ในวัตถุ ชั้น เป็นอินสแตนซ์ของคลาส Arrayและสามารถเข้าถึงเมธอดอาร์เรย์ทั้งหมด เนื่องจากเป็นอาร์เรย์แม้ว่าจะเป็นค่าคงที่ แต่องค์ประกอบต่างๆจึงสามารถแก้ไขและล้างข้อมูลได้โดยไม่มีปัญหา โดยค่าเริ่มต้นทับทิมจับทุกอาร์กิวเมนต์บรรทัดคำสั่งที่ส่งไปยังโปรแกรมทับทิม (แยกด้วยช่องว่าง) เมื่อไบนารีบรรทัดคำสั่งเรียกและเก็บไว้เป็นสตริงในอาร์เรย์ ARGV
เมื่อเขียนภายในโปรแกรม Ruby ของคุณARGVจะใช้คำสั่งบรรทัดคำสั่งที่มีลักษณะดังนี้:
test.rb hi my name is mukesh
และสร้างอาร์เรย์ที่มีลักษณะดังนี้:
["hi", "my", "name", "is", "mukesh"]
แต่ถ้าฉันต้องการส่งผ่านอินพุตที่ จำกัด เราสามารถใช้สิ่งนี้ได้
test.rb 12 23
และใช้อินพุตเหล่านี้ในโปรแกรมของคุณ:
a = ARGV[0]
b = ARGV[1]
หากคุณต้องการเก็บอาร์กิวเมนต์จาก Terminal ให้ลองใช้รหัสต่อไปนี้:
A = ARGV[0].to_i
B = ARGV[1].to_i
puts "#{A} + #{B} = #{A + B}"
หากคุณต้องการสร้างคอนโซลแบบโต้ตอบ:
#!/usr/bin/env ruby
require "readline"
addends = []
while addend_string = Readline.readline("> ", true)
addends << addend_string.to_i
puts "#{addends.join(' + ')} = #{addends.sum}"
end
การใช้งาน (สมมติว่าคุณใส่ข้อมูลโค้ดด้านบนลงในsummator
ไฟล์ในไดเร็กทอรีปัจจุบัน):
chmod +x summator
./summator
> 1
1 = 1
> 2
1 + 2 = 3
ใช้Ctrl + D
เพื่อออก