Ruby
 Computer >> コンピューター >  >> プログラミング >> Ruby

変数がRubyで定義されているかどうかを確認する方法

Rubyはこのdefined? 変数が定義されているかどうかを確認するのに役立つキーワード。

変数が存在する場合は、そのタイプを取得します

 apple =1defined?(apple)# "local-variable" 

そうでない場合はゼロになります

 defined?(bacon)#nil 

これは、Javascriptのtypeofのようなものです オペレーター。オブジェクトのクラスを知りたい場合は、classを使用してください これの代わりに方法。

注意すべきいくつかの興味深い点:

  • defined? キーワードです 、メソッドではありません
  • defined? はRubyで疑問符で終わる数少ないもののひとつですが、通常の規則に従ってtrueを返すことはありません。 またはfalse
  • defined? nil値とこれまでに設定されたことのない変数の違いがわかります

これらの特別な属性により、このキーワードは学ぶ価値があります。

定義された変数をチェックするためのより良い方法

このキーワードは便利ですが、いくつか問題があります。

なぜですか?

演算子の優先順位が低いため 。

このようなことをした場合:

<事前>定義?オレンジ&&orange.size

結果は「表現」です。

orange && orange.size defined?への引数として解釈されます 。

これを行う正しい方法は次のとおりです。

 defined?(orange)&&orange.size 

Rubyには、変数が定義されているかどうかを確認する他の方法があります。

ローカル変数の場合

 local_variables.include?(:orange)

インスタンス変数の場合

 instance_variable_defined?( "@ food")

しかし、あなたはそれを使いたくないのです。

99%のケースで、ローカル変数が欠落している場合は、タイプミスがあるか、誰かがその変数を宣言するのを忘れています。

インスタンス変数はどうですか?

未定義のインスタンス変数は常にnilです 、それを確認したいのです。

変数がnilでない場合にのみメソッドを呼び出す「安全なナビゲーター演算子」(Ruby 2.3以降)を試してください。 。

ここに例があります

 if @ user&.country =="Spain"#... end 

これはと同等です :

 if @user &&@ user.country =="Spain"#... end 

これらはdefined?ほど普遍的ではありません キーワードですが、予測可能性が高く、エラーが発生しにくいです。

メソッドが定義されているかどうかを確認する

defined?を使用できます メソッドが定義されているかどうかを確認しますが、それほど実用的ではありません。

 defined?(puts)# "method" 

これはキーワードであり、メソッドではないため、オブジェクトで使用することはできません。

これが私の言いたいことです

 []。defined?(:size)#undefined method `defined? ' []:Array
の場合

あなたはrespond_to?を探しています メソッド。

使用方法は次のとおりです

 []。respond_to?(:size)#true []。respond_to?(:orange)#false 

クラスが存在するかどうかを確認する

 defined?(Object)# "constant" defined?(A)#nil 

より良いオプションは、const_defined?を使用することです。 メソッド。

このように

 Object.const_defined?(:String)#trueObject.const_defined?(:A)#false 

概要

これで、特定の変数、クラス、またはメソッドが存在するかどうかを確認する簡単な方法を学びました!

変数を操作する場合、ほとんどの場合、nilをチェックする必要があります。 、変数が定義されているかどうかの代わりに。または、変換メソッドを使用して変数を既知のクラスに変換することをお勧めします。

この記事がお役に立てば幸いです。行った場合は共有してください より多くの人が楽しめるようにしています。


  1. Rubyで環境変数を使用する方法

    環境変数はキーと値のペアであり、次のようになります。 KEY=VALUE これらの変数を使用して、コンピューター内のすべてのプログラム間で構成オプションを共有します。 そのため、それらがどのように機能するか、およびENVを使用してRubyプログラムからそれらにアクセスする方法を学ぶことが重要です。 特別な変数。 環境変数の例 : デフォルトのエディターの構成 宝石の場所をRubyに伝える(GEM_PATH / GEM_HOME ) APIキーを、ソース管理(git)にコミットせずにアプリケーションに渡す オペレーティングシステムがバイナリファイル(Windowsでは.exe)を検

  2. マトリックスとは何ですか?Rubyでそれを使用する方法は?

    マトリックスは、スプレッドシートのようなデータを保存および操作するために使用できる2D(2次元)配列です。 次の用途に使用できます : テーブルゲーム(チェス、チェッカーなど)でボードを表す 統計とデータ分析 プロットとグラフの生成 これは強力なデータ構造であるため、使用方法を学ぶのに役立ちます。 Rubyでマトリックスを作成する方法 配列を使用して行列を作成できます。 このように : matrix = [ [1,2,3], [4,5,6], [7,8,9] ] これにより、3×3のマトリックスが生成されます。これは、2次元データをボードまたは位置のセットとして保