Baca masukan dari konsol di Ruby?

115

Saya ingin menulis program A + B sederhana di ruby, tetapi saya tidak tahu cara bekerja dengan konsol.

Sergey
sumber
10
Saya berbicara tentang Ruby tapi bukan ROR. Tidak ada kabar di sana tentang masukan dari konsol.
Sergey

Jawaban:

228

Apa yang kamu bicarakan gets?

puts "Enter A"
a = gets.chomp
puts "Enter B"
b = gets.chomp
c = a.to_i + b.to_i
puts c

Sesuatu seperti itu?

Memperbarui

Kernel.getsmencoba membaca parameter yang ditemukan di ARGVdan hanya meminta untuk menghibur jika tidak ARGVditemukan. Untuk memaksa membaca dari konsol meskipun ARGVtidak kosong digunakanSTDIN.gets

siame
sumber
59
Saya memiliki konflik dengan solusi ini: Kernel.getscoba baca file yang ditemukan ARGVdan hanya minta konsol jika tidak ARGVditemukan. Untuk memaksa membaca dari konsol meskipun ARGVtidak kosong digunakan STDIN.gets.
fguillen
3
a.to_idan b.to_ibisa lebih baik
Dorian
adalah getsmemblokir? Jika tidak, apakah ada pengganti yang memblokir?
noMAD
1
@fguillen itu jawaban yang bagus dan tidak boleh disembunyikan di komentar. Bisakah Anda menjawabnya? Terima kasih!
Dan Rosenstark
2
@Yar terima kasih atas sarannya, saya telah menambahkan pembaruan ke jawabannya sendiri.
fguillen
28

Anda juga dapat meneruskan parameter melalui baris perintah. Argumen baris perintah disimpan dalam array ARGV. jadi ARGV [0] adalah angka pertama dan ARGV [1] adalah angka kedua

#!/usr/bin/ruby

first_number = ARGV[0].to_i
second_number = ARGV[1].to_i

puts first_number + second_number

dan Anda menyebutnya seperti ini

% ./plus.rb 5 6
==> 11
rik.vanmechelen
sumber
10

Ada banyak cara untuk menerima masukan dari pengguna. Saya pribadi suka menggunakan metode mendapat. Saat Anda menggunakan get, ia mendapatkan string yang Anda ketikkan, dan itu termasuk tombol ENTER yang Anda tekan untuk mengakhiri input Anda.

name = gets
"mukesh\n"

Anda dapat melihat ini di irb ; ketik ini dan Anda akan melihat \ n, yang merupakan karakter “baris baru” yang dihasilkan oleh tombol ENTER: Ketik name = getsAnda akan melihat sesuatu seperti "mukesh\n" Anda dapat menyingkirkan karakter baris baru yang mengganggu menggunakan metode chomp .

Metode chomp memberi Anda kembali string, tetapi tanpa mengakhiri baris baru. Penyelamat hidup metode chomp yang indah.

name = gets.chomp
"mukesh"

Anda juga dapat menggunakan terminal untuk membaca input. ARGV adalah konstanta yang ditentukan di kelas Object . Ini adalah turunan dari kelas Array dan memiliki akses ke semua metode array. Karena ini adalah sebuah array, meskipun itu adalah konstanta, elemen-elemennya dapat dimodifikasi dan dibersihkan tanpa masalah. Secara default, Ruby menangkap semua argumen baris perintah yang diteruskan ke program Ruby (dipisahkan oleh spasi) ketika biner baris perintah dipanggil dan menyimpannya sebagai string dalam array ARGV .

Saat ditulis di dalam program Ruby Anda, ARGV akan mengambil perintah baris perintah yang terlihat seperti ini:

test.rb hi my name is mukesh

dan buat larik yang terlihat seperti ini:

["hi", "my", "name", "is", "mukesh"]

Tapi, jika saya ingin memberikan input terbatas maka kita bisa menggunakan sesuatu seperti ini.

test.rb 12 23

dan gunakan masukan tersebut seperti ini dalam program Anda:

a = ARGV[0]
b = ARGV[1]
Mukesh Kumar Gupta
sumber
5

jika Anda ingin menahan argumen dari Terminal, coba kode berikut:

A = ARGV[0].to_i
B = ARGV[1].to_i

puts "#{A} + #{B} = #{A + B}"
rilutham.dll
sumber
0

Jika Anda ingin membuat konsol interaktif:

#!/usr/bin/env ruby

require "readline"
addends = []
while addend_string = Readline.readline("> ", true)
  addends << addend_string.to_i
  puts "#{addends.join(' + ')} = #{addends.sum}"
end

Penggunaan (dengan asumsi Anda meletakkan cuplikan di atas ke dalam summatorfile di direktori saat ini):

chmod +x summator
./summator
> 1
1 = 1
> 2
1 + 2 = 3

Gunakan Ctrl + Duntuk keluar

wik
sumber