Có cách nào để tắt warning: already initialized constant
khi tải các tệp cụ thể không?Cách tắt cảnh báo để xác định lại một hằng số khi tải tệp
Trả lời
Để ngăn chặn cảnh báo, sử dụng đoạn mã sau ở phía trên cùng của kịch bản:
$VERBOSE = nil
Câu trả lời được chấp nhận cho this question hữu ích. Tôi nhìn vào nguồn Rails để có được những điều sau đây. Trước và sau khi tải tệp, tôi có thể chèn các dòng sau:
# Supress warning messages.
original_verbose, $VERBOSE = $VERBOSE, nil
load(file_in_question)
# Activate warning messages again.
$VERBOSE = original_verbose
hoạt động. Tôi có lẽ nên viết một wrapper cho nó. – Dorian
Giải pháp cho vấn đề của bạn tùy thuộc vào nguyên nhân gây ra sự cố.
1 - Bạn đang thay đổi giá trị của hằng số được đặt trước một nơi nào đó trong mã của bạn hoặc đang cố xác định hằng số có cùng tên với lớp hoặc mô-đun hiện có. Giải pháp: không sử dụng hằng số nếu bạn biết trước rằng giá trị của hằng số sẽ thay đổi; không định nghĩa các hằng số có cùng tên với lớp/mô-đun.
2 - Bạn đang ở trong tình huống mà bạn muốn xác định lại hằng số vì lý do chính đáng mà không nhận được cảnh báo. Có hai lựa chọn.
Trước tiên, bạn có thể undefine hằng trước khi xác định lại nó (điều này đòi hỏi một phương pháp helper, vì remove_const
là một chức năng riêng):
Object.module_eval do
# Unset a constant without private access.
def self.const_unset(const)
self.instance_eval { remove_const(const) }
end
end
Hoặc, bạn chỉ có thể nói với người phiên dịch Ruby để im lặng (điều này ngăn chặn tất cả cảnh báo):
# Runs a block of code without warnings.
def silence_warnings(&block)
warn_level = $VERBOSE
$VERBOSE = nil
result = block.call
$VERBOSE = warn_level
result
end
3 - bạn đang cần một thư viện bên ngoài mà định nghĩa một lớp/mô-đun có cuộc đụng độ với một hằng số mới hoặc lớp/mô-đun bạn đang tạo tên. Giải pháp: bọc mã của bạn bên trong một không gian tên mô-đun cấp cao nhất để ngăn chặn xung đột tên.
class SomeClass; end
module SomeModule
SomeClass = '...'
end
4 - Tương tự như trên, nhưng bạn hoàn toàn cần xác định một lớp có cùng tên với lớp của gem/library. Giải pháp: bạn có thể gán tên lớp của thư viện cho một biến, và sau đó rõ ràng nó cho sử dụng sau này của bạn:
require 'clashing_library'
some_class_alias = SomeClass
SomeClass = nil
# You can now define your own class:
class SomeClass; end
# Or your own constant:
SomeClass = 'foo'
Hãy thử cách này:
Kernel::silence_warnings { MY_CONSTANT = 'my value '}
Phương pháp này không tồn tại với Ruby 2.0.0. – bfontaine
Đó là một phần của đường ray: http://api.rubyonrails.org/classes/Kernel.html#method-i-silence_warnings – stackdump
Giải pháp tuyệt vời, Đó là một phần của đường ray, nhưng bạn chỉ có thể nhập 2 phương thức 'silence_warnings' và' with_warnings' trong một tệp bạn chọn và vá 'Kernel' với nó. – Benj
- 1. Làm thế nào để xác định lại một hằng số Ruby mà không cần cảnh báo?
- 2. Xác định các hằng số quá tải trong Isabelle
- 3. Tắt cảnh báo khi tải HTML không được định dạng tốt bằng DomDocument (PHP)
- 4. Làm cách nào để xác định các hằng số trong một tệp riêng biệt trong Perl?
- 5. Xác định lại các hằng số trong PHP
- 6. Cách xác định cảnh báo trong bảng phân cảnh Xcode?
- 7. Có cách viết tắt để tạo hằng số Chuỗi trong tệp XML ngữ cảnh mùa xuân không?
- 8. Tắt cảnh báo CS1607
- 9. Cách tắt cảnh báo 'xác định' không được xác định bằng cách sử dụng JSHint và RequireJS
- 10. Tại sao 'được xác định() || xác định 'cú pháp trong việc xác định một hằng số
- 11. Cách tắt cảnh báo #pragma không xác định cụ thể? (GCC và/hoặc clang)
- 12. Cách chính xác để ghi lại các hằng số PHP (định nghĩa) bằng phpDocumentor
- 13. Xác định hằng số lớp trong PHP
- 14. Phạm vi hằng số để một bối cảnh rspec
- 15. Cách tạo tệp hằng số trong Javascript?
- 16. Lỗi xác định hằng số trong Delphi
- 17. Làm cách nào để tắt cảnh báo thụt lề JSLint?
- 18. Làm cách nào để hiển thị cảnh báo sau khi tải lại trang bằng JavaScript?
- 19. Làm cách nào để khai báo hằng số Int64?
- 20. Làm cách nào để ghi lại các lỗi và cảnh báo vào một tệp?
- 21. tắt cảnh báo trong leksah
- 22. Bao gồm phép tính số học khi xác định một hằng số
- 23. Làm cách nào để tắt cảnh báo 'zip' trong bash?
- 24. Tắt cảnh báo cảnh báo không an toàn mysql
- 25. Cách xác định hằng số thành viên loại trong F #?
- 26. tắt cảnh báo cụ thể trong gcc
- 27. Làm cách nào để tắt "cảnh báo là lỗi" cho các tệp được tạo? (MSBuild)
- 28. cách tắt các cảnh báo PHP này?
- 29. Xác định hằng số ứng dụng trong Codeigniter
- 30. Xác định TRACE Hằng số trong .NET/Visual Studio
Việc sửa mã có thực sự nằm ngoài câu hỏi không? – sarnold
Cảnh báo thường chỉ ra các lỗi ** không gây tử vong ** và phải được khắc phục. Trong trường hợp này bạn rất có thể có một vấn đề thực sự cần được sửa. –
bạn đã khởi tạo biến nhiều lần. –