Đọc đầu vào từ bảng điều khiển trong Ruby?


115

Tôi muốn viết một chương trình A + B đơn giản bằng ruby, nhưng tôi không biết cách làm việc với bảng điều khiển.


10
Tôi đang nói về Ruby nhưng không phải ROR. Không có từ nào ở đó về đầu vào từ bảng điều khiển.
Sergey

Câu trả lời:


228

Bạn đang nói về gets?

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

Một cái gì đó như vậy?

Cập nhật

Kernel.getscố gắng đọc các tham số được tìm thấy trong ARGVvà chỉ yêu cầu điều khiển nếu không ARGVtìm thấy. Để buộc đọc từ bảng điều khiển ngay cả khi ARGVkhông sử dụng trốngSTDIN.gets


59
Tôi có xung đột với giải pháp này: Kernel.getscố gắng đọc các tệp được tìm thấy trong ARGVvà chỉ yêu cầu bảng điều khiển nếu không ARGVtìm thấy. Để buộc đọc từ bảng điều khiển ngay cả khi ARGVkhông sử dụng trống STDIN.gets.
fguillen

3
a.to_ib.to_icó thể tốt hơn
Dorian

đang getschặn? Nếu không, có bất kỳ thay thế nào đang chặn không?
noMAD

1
@fguillen đó là một câu trả lời tuyệt vời và không nên ẩn trong nhận xét. Bạn có thể làm cho nó một câu trả lời, xin vui lòng? Cảm ơn!
Dan Rosenstark

2
@Yar cảm ơn bạn đã gợi ý, tôi đã thêm bản cập nhật cho chính câu trả lời.
fguillen

28

bạn cũng có thể chuyển các tham số thông qua dòng lệnh. Đối số dòng lệnh là các cửa hàng trong mảng ARGV. vì vậy ARGV [0] là số đầu tiên và ARGV [1] là số thứ hai

#!/usr/bin/ruby

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

puts first_number + second_number

và bạn gọi nó như thế này

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

10

Có nhiều cách để lấy ý kiến ​​từ người dùng. Cá nhân tôi thích sử dụng phương pháp get. Khi bạn sử dụng hàm get, nó sẽ nhận chuỗi mà bạn đã nhập và bao gồm phím ENTER mà bạn đã nhấn để kết thúc quá trình nhập của mình.

name = gets
"mukesh\n"

Bạn có thể thấy điều này trong irb ; gõ cái này và bạn sẽ thấy \ n, là ký tự "dòng mới" mà phím ENTER tạo ra: Nhập, name = getsbạn sẽ thấy một cái gì đó như "mukesh\n" Bạn có thể loại bỏ tự dòng mới khó chịu bằng phương thức chomp .

Phương thức chomp trả lại cho bạn chuỗi, nhưng không có dòng mới kết thúc. Đẹp chomp method cứu tinh cuộc sống.

name = gets.chomp
"mukesh"

Bạn cũng có thể sử dụng thiết bị đầu cuối để đọc đầu vào. ARGV là một hằng số được định nghĩa trong lớp Đối tượng . Nó là một thể hiện của lớp Array và có quyền truy cập vào tất cả các phương thức của mảng. Vì nó là một mảng, mặc dù nó là một hằng số, các phần tử của nó có thể được sửa đổi và xóa mà không gặp khó khăn gì. Theo mặc định, Ruby nắm bắt tất cả các đối số dòng lệnh được chuyển đến một chương trình Ruby (được phân chia bởi dấu cách) khi lệnh nhị phân dòng lệnh được gọi và lưu trữ chúng dưới dạng chuỗi trong mảng ARGV .

Khi được viết bên trong chương trình Ruby của bạn, ARGV sẽ thực hiện một lệnh dòng lệnh giống như sau:

test.rb hi my name is mukesh

và tạo một mảng trông giống như sau:

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

Nhưng, nếu tôi muốn thông qua đầu vào hạn chế thì chúng ta có thể sử dụng một cái gì đó như thế này.

test.rb 12 23

và sử dụng những đầu vào như thế này trong chương trình của bạn:

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

5

nếu bạn muốn giữ các đối số từ Terminal, hãy thử đoạn mã sau:

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

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

0

Nếu bạn muốn tạo bảng điều khiển tương tác:

#!/usr/bin/env ruby

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

Cách sử dụng (giả sử bạn đặt đoạn mã trên vào summatortệp trong thư mục hiện tại):

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

Sử dụng Ctrl + Dđể thoát

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.