1

PHPでは、快適に次のように書くことができます。

if (x > 100) 
{ 
   method(); 
}

xが存在しない場合、私のプログラムはxを道路の小さな隆起として扱い、続行することを知っています。

私はphpの非常に緩い変数の型付けと宣言されていない処理に慣れており、これに関連してRubyのルールは何であるか疑問に思っています。

宣言されていないものを評価しようとしたときのRubyのデフォルトのアクションは何ですか?

そして、私もこれをこしょうできるとしたら... null、zero、falseはRubyで同じものに等しいのでしょうか?だろう

if(!x)
{
  puts 'works'
}

置く?

これらは非常に単純な質問ですが、わかりにくいか、間違った検索フレーズを使用しています。

4

2 に答える 2

4
  1. デカールしていない変数を使用すると、Rubyは文句を言います。

  2. ifルビーでは、通常、{とを囲みません。と}を入れて、ifそれをで終了しendます。

  3. false nil0は別のものです。あなたのコードxは、定義されていないputsことxfalse文句を言います。nil

  4. ルビーで値がnilあなたがnil?そのように使用しているかどうかを確認するif !x.nil?

于 2013-02-06T20:58:06.580 に答える
1

最後の質問から始めます:ルビーでは、ゼロは偽として扱われません、唯一の偽の値は:nilそして明らかにfalse。それ以外はすべて「真の」値です。

重要:インスタンス化されていないローカル変数に変更があるのは実際には正常ではないため、インスタンス変数を使用します。

では、なぜこれが機能しないのか

if @x > 100 
  method()
end

>rubyは実際にはメソッド呼び出しであるため、が@xnil(未定義の変数)の場合NoMethodError、nilにはそのメソッドが定義されていないため、が発生します。

NoMethodError: undefined method `>' for nil:NilClass

したがって、自分の状態でできることは、最初に次のよう@xな値があることを確認することです。

if @x && @x > 100 
  method()
end
于 2013-02-06T21:02:58.957 に答える