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.
Nguồn
2016-12-19 05:20:26
Hàm trống ('def foo; end') cũng trả về' nil' hoàn toàn. –
@Zoidberg đó là sự thật nhưng sử dụng thực tế? – texasbruce
Vâng, để nhất quán tôi sẽ trả về 'nil' từ một hàm trả về" void "quá. –