2013-03-09 36 views
7

Kinh nghiệm của tôi là bằng ngôn ngữ C (C, C++, Java, C#) trong đó kiểu trả về của một hàm có thể bị vô hiệu, tức là không trở lại. Nhưng trong Ruby, có vẻ như mọi chức năng đều trả về một cái gì đó. Tôi đã tự hỏi những gì để trở lại trong Ruby cho một phương pháp mà sẽ không trả lại bất cứ điều gì trong Java hoặc C + +. Những dự đoán tốt nhất của tôi sẽ là nil hoặc đối tượng chứa phương thức (cho chuỗi) hoặc chỉ bỏ qua bất kỳ điều gì xảy ra ở cuối, nhưng tôi dường như không tìm thấy bất kỳ thông tin nào về điều này.Ruby thay thế cho void return type

Thay thế cho void trong Ruby là gì?

Trả lời

9

Đặt

return nil 

trong báo cáo cuối cùng trong phương pháp.

Hoặc đơn giản là

nil 
+2

Hàm trống ('def foo; end') cũng trả về' nil' hoàn toàn. –

+0

@Zoidberg đó là sự thật nhưng sử dụng thực tế? – texasbruce

+0

Vâng, để nhất quán tôi sẽ trả về 'nil' từ một hàm trả về" void "quá. –

0

Nếu bạn muốn gì để được trả lại, có bạn có thể sử dụng trở lại con số không. Nhưng tại sao?

Bằng cách không chỉ định một cuộc gọi hàm tới biến, bạn có thể bỏ qua những gì đã được trả lại một cách hạnh phúc. Giá trị trả về đó sẽ được lưu trữ không ở đâu và sẽ bị mất trong bộ sưu tập rác.

+11

Nếu bạn không ít nhất nghĩ về những gì biểu thức cuối cùng trong phương pháp đánh giá bạn có thể vô tình làm rò rỉ thông tin về việc thực hiện phương pháp và mọi người có thể bắt đầu dựa vào đó, ngay cả khi tài liệu của bạn nói khác đi. –

0

nil không giống như void. Bạn có thể đặt một biến thành nil, nhưng bạn không thể đặt biến thành void. Nếu một hàm trả về nil, nó có thể được gán cho một biến không có lỗi, nhưng hãy thử với một hàm void (trong java hoặc một số ngôn ngữ như vậy có hỗ trợ các hàm void) và trình biên dịch sẽ sủa. Tôi không phải là một siêu chuyên gia, nhưng tôi không thể tìm thấy dấu hiệu nào cho thấy khái niệm về khoảng trống được hỗ trợ. Tất cả các chức năng trả lại một cái gì đó, ngay cả khi nó là nil. Nếu điều này là không đúng thì tôi hy vọng ai đó có nhiều kiến ​​thức về ruby ​​có thể cung cấp một ví dụ.

Biến, đặc biệt là trong ruby ​​nơi mọi thứ đều là đối tượng, là một thứ có tên và địa điểm để lưu trữ địa chỉ trỏ tới đối tượng ở đâu đó trên heap. Việc đặt một biến thành nil có nghĩa là thiết lập con trỏ của nó thành cá thể một và duy nhất của NilClass. (đúng và sai là tương tự; có một cá thể của TrueClass và FalseClass.)

Tôi nhận ra rằng C có một thứ gọi là con trỏ void. Đây là cách sử dụng hoàn toàn khác của từ "void". Một con trỏ void trong thực tế có chứa một địa chỉ và trỏ đến một cái gì đó. Hãy bỏ qua những điều này ngay bây giờ; Tôi chỉ đề cập đến họ để bắt đầu từ chối không hợp lệ. Chúng tôi đang tập trung vào các chức năng bằng ruby ​​theo nghĩa đen trả về không có gì là, không tồn tại như tôi có thể nói.

Các vấn đề liên quan