2012-08-24 29 views
12

Đây là mẫu chung: Nếu biến không tồn tại, tôi nhận được lỗi undefined local variable or method.Làm cách nào để kiểm tra xem biến có tồn tại với giá trị không có "biến hoặc phương thức cục bộ chưa xác định" không?

Mã hiện tại có if variable_name.present? nhưng điều này không tính đến biến không tồn tại.

Làm cách nào tôi có thể kiểm tra giá trị của biến và cũng tính đến nó không tồn tại?

Tôi đã thử:

if (defined? mmm) then 
    if mmm.present? then 
    puts "true" 
    end 
end 

nhưng Ruby vẫn kiểm tra rằng nội mmm.present? và ném "không như vậy biến" khi nó không tồn tại.

Tôi chắc chắn có một mẫu/giải pháp chung cho điều này.

Trả lời

21

Thay đổi present?-!= '':

if defined?(mmm) && (mmm != '') then puts "yes" end 
+0

Ngoài ra chú ý đến các nhà khai thác sở thích và sử dụng dấu ngoặc một cách thích hợp, trong trường hợp này phần thứ hai của biểu thức bao gồm ngoặc, nhưng nếu bạn đang kiểm tra một _boolean_ và bạn không sử dụng dấu ngoặc cho môi trường 'định nghĩa? (Mmm) 'điều kiện sẽ trả về' true'. Vì vậy, khi so sánh phức tạp, bạn nên sử dụng '(định nghĩa? (Mmm)) ' – Asier

1

thử:

if defined?(mm) && !mm.blank? 
    puts "acceptable variable" 
end 

Nó có thể chắc chắn rằng bạn sẽ không nhận được biến không xác định hoặc nil hoặc giá trị rỗng.

Bạn chỉ có thể sử dụng được xác định? để phát hiện hàm băm đã hết hạn, đặc biệt là với hàm băm cấp sâu.

if defined?(session[:user]['name']) 
    puts "active session" 
else 
    puts "expired session" 
end 
+0

Không thông thạo Ruby, nhưng 3 năm sau câu trả lời được chấp nhận, bạn có thể cung cấp một số thông tin về cách nó liên quan đến câu trả lời hiện có (S)? Ở đây tôi đề nghị explaingin một chút các '.nil?' Bổ sung mà có thể là ma thuật sparing 'sau đó' và có tính đến sự tồn tại không. Nhưng bạn chắc chắn sẽ biết rõ hơn. Cảm ơn. – Dilettant

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