Cả hai câu trả lời trên là đúng, nhưng trong bối cảnh của câu hỏi Karthik của trên, chúng tôi nghĩ tôi sẽ gửi một bài kiểm tra đó minh họa cách người ta có thể vượt qua một cách chính xác một biểu tượng cho phương thức include
def test_you_create_a_new_symbol_in_the_test
array_of_symbols = []
array_of_symbols << Symbol.all_symbols
all_symbols = Symbol.all_symbols.map {|x| x}
assert_equal false, array_of_symbols.include?(:this_should_not_be_in_the_symbols_collection) #this works because we stored all symbols in an array before creating the symbol :this_should_not_be_in_the_symbols_collection in the test
assert_equal true, all_symbols.include?(:this_also_should_not_be_in_the_symbols_collection) #This is the case noted in previous answers...here we've created a new symbol (:this_also_should_not_be_in_the_symbols_collection) in the test and then mapped all the symbols for comparison. Since we created the symbol before querying all_symbols, this test passes.
end
Một lưu ý bổ sung về công án : sử dụng các câu lệnh puts
cũng như các bài kiểm tra tùy chỉnh nếu bạn không hiểu bất kỳ điều gì. Ví dụ, nếu bạn thấy:
string = "the:rain:in:spain"
words = string.split(/:/)
và không có ý tưởng gì words
có thể, hãy thêm dòng
puts words
và chạy rake
tại dòng lệnh. Tương tự như vậy, các bài kiểm tra như tôi đã thêm ở trên có thể hữu ích trong việc hiểu một số sắc thái của Ruby.
Lưu ý rằng cách tốt hơn để làm điều này một cách an toàn là gán đầu ra của 'Symbol.all_symbols' cho một biến, sau đó kiểm tra để đưa vào. Các ký hiệu nhanh hơn khi so sánh và bạn đang tránh chuyển đổi hàng nghìn ký hiệu thành chuỗi. – coreyward
Điều đó vẫn còn có vấn đề tạo ra các biểu tượng mà không thể bị phá hủy. Bất kỳ thử nghiệm nào trong tương lai cho biểu tượng đó sẽ bị hủy hoại. Nhưng đây chỉ là một Koan, nó không phải có ý nghĩa hay nhanh chóng, chỉ chứng minh làm thế nào biểu tượng làm việc. – AboutRuby
Câu trả lời này không phù hợp với tôi. Nếu chúng ta đang tìm kiếm sự tồn tại của một biểu tượng, tại sao chúng ta chỉ định một đối số chuỗi cho '' include? '' Nếu chúng ta chỉ định '': test_method_names_become_symbols'', chúng ta sẽ không phải chuyển đổi tất cả các ký tự đó thành chuỗi. –