Helpex - Trao đổi & giúp đỡ Đăng nhập
6

Tất cả các giá trị cho bbên dưới cho phép tôi gọi một phương thức với *argscú pháp.

def some_method(a)
   puts a
end

b = 1
some_method(*b) # => 1

b = false
some_method(*b) # => false

b = "whatever"
some_method(*b) # => "whatever"

Với nil, tôi mong đợi nhận được nil, không phải lỗi đối số:

b = nil
some_method(*b) # => ArgumentError: wrong number of arguments (0 for 1)

Có chuyện gì đang xảy ra ở đây?

6 hữu ích 5 bình luận 2.4k xem chia sẻ
7

Toán tử splat *trước tiên áp dụng to_acho đối tượng nếu nó không phải là một mảng và to_ađược định nghĩa trên đó. Đối với chữ số, falseclass và chuỗi, to_akhông được xác định, và chúng vẫn là chính chúng. Đối với nilclass, to_ađược định nghĩa và trả về một mảng trống. Khi chúng được tách ra, các chữ số, falseclass và chuỗi vẫn là chính chúng, nhưng mảng trống trở nên không có bất kỳ thứ gì. Cũng xem một câu trả lời cho câu hỏi này .

7 hữu ích 1 bình luận chia sẻ
loading
Không tìm thấy câu trả lời bạn tìm kiếm? Duyệt qua các câu hỏi được gắn thẻ ruby arguments null splat , hoặc hỏi câu hỏi của bạn.

Có thể bạn quan tâm

loading