2009-05-20 20 views
22

Trong JavaScript có một cách hữu ích để kiểm tra một biến chưa bao giờ được xác định tại bất kỳ điểm cụ thể nào. Ví dụ, đoạn mã sau đây sẽ trở thành sự thật nếu biến bob chưa được xác định:Kiểm tra các biến không xác định trong Ruby a la JavaScript?

typeof(bob)=='undefined' 

Làm thế nào để thực hiện các thử nghiệm tương tự trong Ruby?

chỉnh sửa: Tôi đang tìm một bài kiểm tra nhỏ gọn về bản chất. Tôi đã đưa ra một số xấp xỉ khó xử bằng cách sử dụng ngoại lệ và như vậy, nhưng những người không phải là rất đẹp!

Trả lời

43
defined?(variable_name) 

irb(main):004:0> defined?(foo) 
=> nil 
irb(main):005:0> foo = 1 
=> 1 
irb(main):006:0> defined?(foo) 
=> "local-variable" 

Đây là một số write up tốt.

+0

heheh, ai có thể biết nó sẽ là dễ dàng như vậy. Tôi đã thực hiện các công cụ như: kiểm tra = bắt đầu does_not_exist Tên giải cứuError "undefined" end –

+0

thú vị được xác định? blah trả về nil và không sai và trả về một chuỗi kiểu nếu nó được định nghĩa –

+0

Có một số tùy chọn khác như object.instance_variable_defined? (: var_name). Tìm kiếm trong tài liệu để xác định? và bạn sẽ tìm thấy các phiên bản cụ thể hơn. – jshen

8

defined? là hàm trả về 0 nếu mục chưa được xác định.

defined? somevar 
=> nil 
somevar = 12 
defined? somevar 
=> "local-variable" 

Vì vậy:

if defined?(somevar) 
    do_something 
end 
3

Hãy ghi nhớ rằng định nghĩa? trả về một chuỗi nếu biến được xác định, nil nếu không, vì vậy hãy sử dụng kiểm tra có điều kiện trên các kết quả của nó. Tôi nghĩ cú pháp ám chỉ rằng nó sẽ trả về một boolean.

+0

Đúng, nhưng vì 'nil' là falsey và tất cả các chuỗi là sự thật , bạn có thể xử lý các giá trị trả về như boolean cho tất cả các mục đích kiểm soát luồng (nếu, elsif, trừ khi, trong khi, cho đến khi, vv). – rampion

-1

Cũng có thể kiểm tra theo cách này.

if somevar.nil 
     # not set do something 
    else 
     # is set do something else 
    end 
+0

Không. "nil" và "undefined" có nghĩa là hai thứ khác nhau. –

+0

nếu định nghĩa? (Variable_to_test) == nil puts "variable_to_test là undefined" khác puts "variable_to_test được định nghĩa" cuối => variable_to_test là undefined variable_to_test = "" nếu định nghĩa? (Variable_to_test) = = nil puts "variable_to_test là undefined" khác puts "variable_to_test được định nghĩa" cuối => variable_to_test được định nghĩa có vẻ như có nên là một cách đơn giản hơn? – Greg

+0

Rất tiếc, đã cố gắng đăng lại với định dạng chính xác và không thành công. Một lát sau – Greg

0

Tất cả các trường hợp sử dụng:

defined? ur_variable 
=> nil 

ur_variable= 12 
defined? ur_variable 
=> "local-variable" 

another_variable = nil 
defined? another_variable 
=> "local-variable" 
Các vấn đề liên quan