Ruby'de konsoldan girdi okundu mu?


115

Ruby'de basit bir A + B programı yazmak istiyorum, ancak konsolla nasıl çalışacağım konusunda hiçbir fikrim yok.


10
Ruby'den bahsediyorum ama ROR'dan bahsetmiyorum. Orada konsoldan girişle ilgili bir kelime yok.
Sergey

Yanıtlar:


228

Hakkında getsmı konuşuyorsun

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

Bunun gibi bir şey?

Güncelleme

Kernel.getsiçinde bulunan parametreleri okumaya çalışır ARGVve sadece ARGVbulunamazsa konsola sorar . ARGVBoş olmasa bile konsoldan okumaya zorlamak içinSTDIN.gets


59
Bu çözümle bir çelişki yaşıyorum: Kernel.getsiçinde bulunan dosyaları okumaya çalışın ARGVve yalnızca ARGVbulunamazsa konsola sorar . ARGVBoş kullanım olmasa bile konsoldan okumaya zorlamak STDIN.gets.
fguillen

3
a.to_ive b.to_idaha iyi olabilirdi
Dorian

olduğunu getsengelleme? Değilse, engelleyen herhangi bir yedek var mı?
noMAD

1
@fguillen bu harika bir cevap ve yorumlarda saklanmamalıdır. Bir cevap verebilir misin lütfen? Teşekkürler!
Dan Rosenstark

2
@Yar, öneri için teşekkürler , cevabın kendisine bir güncelleme ekledim .
fguillen

28

parametreleri komut satırından da geçirebilirsiniz. Komut satırı argümanları ARGV dizisinde depolanır. yani ARGV [0] ilk sayı ve ARGV [1] ikinci sayıdır

#!/usr/bin/ruby

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

puts first_number + second_number

ve buna böyle diyorsun

% ./plus.rb 5 6
==> 11

10

Kullanıcılardan girdi almanın birçok yolu vardır. Ben şahsen bu yöntemi kullanmayı seviyorum. Gets kullandığınızda, yazdığınız dizeyi alır ve bu, girişinizi sonlandırmak için bastığınız ENTER tuşunu içerir .

name = gets
"mukesh\n"

Bunu irb'de görebilirsiniz ; bunu yazın ve ENTER tuşunun ürettiği "satırsonu" karakteri olan \ n'yi göreceksiniz: Yazma name = getsgibi şeyler göreceksiniz Chomp yöntemini kullanarak "mukesh\n" sinir bozucu satırsonu karakterinden kurtulabilirsiniz .

Chomp yöntemi, satırsonu sonlandırmadan dizeyi geri verir. Güzel chomp yöntemi hayat kurtarıcı.

name = gets.chomp
"mukesh"

Girişi okumak için terminali de kullanabilirsiniz. ARGV , Object sınıfında tanımlanan bir sabittir . Array sınıfının bir örneğidir ve tüm dizi yöntemlerine erişime sahiptir. Bir dizi olduğu için, sabit olmasına rağmen, elemanları sorunsuz bir şekilde değiştirilebilir ve temizlenebilir. Varsayılan olarak Ruby, komut satırı ikilisi çağrıldığında bir Ruby programına aktarılan (boşluklarla bölünmüş) tüm komut satırı argümanlarını yakalar ve bunları ARGV dizisinde dizeler olarak saklar .

Ruby programınızın içine yazıldığında, ARGV şuna benzeyen bir komut satırı komutu alacaktır:

test.rb hi my name is mukesh

ve şuna benzeyen bir dizi oluşturun:

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

Ancak, sınırlı girdiyi geçmek istersem, bunun gibi bir şey kullanabiliriz.

test.rb 12 23

ve bu girdileri programınızda şu şekilde kullanın:

a = ARGV[0]
b = ARGV[1]

5

Bağımsız değişkenleri Terminal'den tutmak istiyorsanız, aşağıdaki kodu deneyin:

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

puts "#{A} + #{B} = #{A + B}"

0

Etkileşimli konsol yapmak istiyorsanız:

#!/usr/bin/env ruby

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

Kullanım (yukarıdaki pasajı summatorgeçerli dizindeki dosyaya koyduğunuzu varsayarak ):

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

Ctrl + DÇıkmak için kullanın

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.