2009-05-20 7 views
22

JavaScriptでは、特定の時点で定義されていない変数をテストする便利な方法があります。Rubyで定義されていない変数をテストするにはJavaScriptを使用しますか?

typeof(bob)=='undefined' 

私はRubyで同じテストを実行するにはどうすればよい?変数ボブが定義されていない場合たとえば、次のコードスニペットは、を返しますか。

編集:私は同じようにコンパクトなテストを探しています。私は例外などを使用していくつかの厄介な近似を思いついたが、それらはあまり美しくない!

答えて

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" 

ここにはwrite upがあります。

+0

heheh、。定義されたことは興味深い does_not_exist 救助NameError 「未定義」 終了 –

+0

を開始= テスト:私のようなものをやっていましたか? blahはnilを返し、falseではなく、定義されていれば型の文字列を返します –

+0

object.instance_variable_defined?(:var_name)のようないくつかのオプションがあります。ドキュメント内で定義されているものを検索しますか?より特定のバージョンを見つけることができます。 – jshen

8

defined?は、項目が未定義の場合はnilを返す関数です。

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

ので:

if defined?(somevar) 
    do_something 
end 
3

は定義されていることに注意してください?変数が定義されている場合は文字列を返し、そうでない場合はnilを返します。その結果に対して条件付き検査を使用します。私は構文が、ブール値を返すと言っていると思います。

+0

'nil'はfalseであり、すべての文字列は真実ですすべてのフロー制御目的(if、elsif、unless、while、untilなど)に対して戻り値をブール値のように扱うことができます。 – rampion

-1

この方法でもテストできます。

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

"nil"と "undefined"は2つの異なることを意味します。定義されている場合は定義されている場合 –

+0

?(variable_to_test)== nilの プット "" = が終了 => variable_to_testが variable_to_test定義されていません "variable_to_testが定義されている" 他 プット "variable_to_testは定義されていません"?(variable_to_test)= = エンド => variable_to_testが を定義している「variable_to_testが定義されている」他 プット プット「variable_to_testが定義されていない」nilをより簡単な方法があるようにあるべきように思えますか? – Greg

+0

申し訳ありませんが、正しい書式で再送信しようとしましたが失敗しました。後で – Greg

0

すべてのユースケース:それはとても簡単だろう知られているだろう

defined? ur_variable 
=> nil 

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

another_variable = nil 
defined? another_variable 
=> "local-variable" 
関連する問題