2012-04-16 51 views
62

Đây là một điều đơn giản, tôi hy vọng. Làm cách nào để kiểm tra, trong ví dụ sau, nếu hằng số đã được xác định?Kiểm tra xem hằng số đã được xác định chưa

#this works 
var = var||1 
puts var 
var = var||2 
puts var 

#this doesn't 
CONST = CONST||1 
puts CONST 
CONST = CONST||2 
puts CONST 

=> 1 
    1 
    uninitialized constant CONST (NameError) 

Trả lời

105
CONST = 2 unless defined? CONST 

Xem here để biết thêm về tuyệt vời defined? điều hành.

P.S. Và trong tương lai, tôi đoán bạn sẽ muốn var ||= 1 thay vì var = var||1.

+0

nhờ, mà làm việc! – peter

+5

Còn có 'const_defined? 'Nhưng nó không hoạt động đối với tôi; không chắc chắn lý do tại sao. –

+7

'const_defined?' Là một phương thức của lớp 'Module' và nó sẽ cho bạn biết liệu hằng số được định nghĩa trong mô đun đó và tổ tiên của nó (tùy chọn). Kiểm tra tài liệu để biết một số ví dụ - http://www.ruby-doc.org/core-1.9.3/Module.html#method-i-const_defined-3F – jibiel

3
CONST ||= :default_value 

các công trình trên đối với tôi trên ruby ​​1.9.3 nhưng không thành công trên 1,8 ... cũng 1.8 là cổ xưa bây giờ.

+0

:) 1.8 có thể là cổ, nhưng vẫn được sử dụng trong năm 2017, ví dụ: Dreamhost shared hosting. – kitschmaster

+0

Tôi thấy hầu hết các dự án đã bỏ hỗ trợ cho ruby ​​1.8. Tôi biết rằng vẫn có phiên bản 1.8 "ruby" được hỗ trợ, ví dụ: được vận chuyển bởi Red Hat Enterprise Linux. Họ đang nhận được bản vá bảo mật nhưng một trong những lộ ra nhiều lỗ hổng bảo mật chưa biết trong phiên bản đá quý cũ được sử dụng trong bất kỳ ứng dụng được cài đặt. Vì vậy, có, có, nhưng không liên quan đến hầu hết mọi người. Giống như có và sẽ được cho một máy tính thời gian dài chạy XP (chỉ gần đây phát hiện một lần nữa như một máy ATM). – akostadinov

11

const_defined? API pry> User.const_defined?("PER_PAGE") => true pry> User.const_defined?("PER_PAGE123") => false

+1

Điều này đặc biệt hữu ích khi bạn kiểm tra xem điều này có được xác định theo cách năng động hay không. – DickieBoy

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