2013-02-07 15 views
6

Tôi biết điều này có vẻ giống như một câu hỏi thực sự đơn giản, nhưng nó thực sự làm phiền tôi rằng đặt của tôi tiếp tục tạo ra "=> nil" và tôi cọ rửa cho một câu trả lời nhưng không thể tìm thấy một. Cảm ơn.Tại sao tất cả các lệnh của tôi đều trả về => nil?

puts 'chớp' * 4 chớp chớp chớp chớp => nil

Trả lời

8

Bởi vì đó là giá trị trả về của puts:

puts (obj, ...) → nil

Viết đối tượng với ios như với IO # print. Ghi một dấu tách bản ghi (thường là một dòng mới) sau bất kỳ dấu phân cách nào không đã kết thúc bằng một chuỗi mới. Nếu được gọi với đối số mảng, sẽ ghi từng phần tử trên một dòng mới. Nếu được gọi không có đối số, sẽ xuất ra một dấu phân tách bản ghi duy nhất.

nguồn: http://www.ruby-doc.org/core-1.9.3/IO.html#method-i-puts

Ngoài ra, tôi cho rằng đây chỉ là trong irb? bởi vì gọi puts không hiển thị giá trị trả về của nó trong các ứng dụng thông thường.

+2

Tôi sẽ thêm rằng mọi hướng dẫn trong ruby ​​đều trả về một cái gì đó. Mọi phương thức, phân bổ, khai báo (của các lớp, phương thức). Và trong irb đó là những gì bạn thấy, giá trị trả về (hoặc đánh giá). Vì vậy, các phương pháp mà không có ý nghĩa để trả lại bất cứ điều gì họ chỉ trở lại nil –

+0

Cảm ơn bạn. Điều này rất hữu ích cho tôi. Bạn là chính xác, tôi đang sử dụng irb. Tôi hiểu rằng tôi sẽ lập trình tốt hơn trong một ứng dụng bình thường. Tôi là người mới, bạn có nghĩ rằng bạn có thể xây dựng? –

+1

'irb' là tốt để chương trình trong, tôi đã chỉ làm cho một điểm mà trong bất kỳ chương trình ruby ​​bên ngoài của' irb' trừ khi bạn đặc biệt kiểm tra giá trị trả lại, nó sẽ không hiển thị nó cho bạn. –

1

Câu trả lời của Hunter McMillen là chính xác.

Tuy nhiên, nếu bạn muốn đặt thay thế thực sự trả về giá trị không phải là số không, tôi đã tạo a gem called reputs.

reputs 'blink ' *4 
blink blink blink blink 
=> "blink blink blink blink " 
5

Bạn có thể muốn sử dụng p thay vì put s.

p in và sau đó trả về giá trị.