2016-01-05 20 views
5

tôi cố gắng sử dụng một Sàng lọc trong IRB (v0.9.6, Ruby 2.3.0):Tại sao tôi nhận được `main.using chỉ được phép tại toplevel` khi tôi sử dụng một sàng lọc trong IRB?

module Foo 
    refine Object do 
    def foo() "foo" end 
    end 
end 

using Foo # => RuntimeError: main.using is permitted only at toplevel 

này về cơ bản là the exact setup from the documentation (mà kết quả trong các lỗi tương tự).

Điều gì đã xảy ra? Làm thế nào để sửa lỗi này?

+0

Trông giống như một vấn đề về phiên bản, tôi nhận được '(irb): 2: cảnh báo: sàng lọc là thử nghiệm, và hành vi có thể thay đổi trong các phiên bản tương lai của Ruby! '. Tôi đang sử dụng 'irb 0.9.6 (09/06/30) 'và' ruby20' – hek2mgl

+0

@ hek2mgl Tôi đang sử dụng phiên bản mới nhất của Ruby/IRB. Các sàng lọc không phải là thử nghiệm nữa; ngôn ngữ đó đã bị xóa khỏi tất cả các tài liệu. –

+1

Nó trông giống như một lỗi trong irb với tôi. Nó hoạt động tốt với nâng lên. Ngoài ra thông báo lỗi không có ý nghĩa vì chúng tôi đang gọi bằng cách sử dụng chính xác ở cấp cao nhất. – Jesuspc

Trả lời

5

Đó là lỗi hoặc lỗi của IRB. Nó được biết đến là do cách thức khá giả mạo IRb được thực hiện, nó không hoạt động đúng cho tất cả các trường hợp góc.

Các không tương thích có lẽ mọi người đều biết là trong Ruby, phương pháp quy định tại các cấp cao nhất trở thành private phương pháp thể hiện của Object, trong khi ở IRB, họ trở thành public phương pháp thể hiện của Object. Một khác biệt hành vi rõ ràng là trong IRb, require_relative không hoạt động, bởi vì nó tìm kiếm liên quan đến tệp hiện tại, nhưng trong IRb, có là không có tệp hiện tại.

Ngoài ra còn có một số khác biệt về cú pháp được chấp nhận, tôi tin và điều gì đó cần làm với các biến cục bộ và khi nào chúng chính xác và không được xác định.

Vì vậy, không thể tưởng tượng rằng có thể có một số khác biệt về hành vi. Tinh lọc. Trong thực tế, bản thân tôi đã gặp phải thông báo lỗi đó, và chạy cùng một mã chính xác bên ngoài IRb, hoặc với ruby -e, từ một tệp hoặc từ một REPL khác, luôn làm cho nó biến mất.

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