2011-02-03 15 views
1

aがfalseの場合Ruby on Railsを使用して初期化されていない変数を想定している値は?私は3はRuby on Railsを使用していますが、私はこのような状況を持っている

私は

# first statement 
if a == true 
    flag = true 
end 

# second statement 
if flag == true 
    // code1 
else 
    // code2 
end 

を持つコントローラでは、何がflag変数を初期化せずにif声明の中で起こりますか?つまり、flagの変数「always」/「in any case」はNOT TRUEに設定されていますか?

安全なアプローチですか?

+0

あなたは資本Aを使用することを意味しましたか?大文字で始まるものは定数です。 –

+0

あなたは正しいです!それは変数です!!!申し訳ありませんが、質問を更新します。 – user502052

答えて

1

割り当てられていない変数はnilですが、定数の動作は少し異なります。変数がnilまたはfalse以外の場合、trueと評価されます。あなたがdefinded?(CONSTANT)を使用する必要が定数ではので、あなたのコードは次のようになります。

# first statement 
flag = A if defined?(A) 

# second statement 
if flag 
    puts "Code 1" 
else 
    puts "Code 2" 
end 

# Or if you don't need the flag variable 
if defined?(A) && A 
    puts "Code 1" 
else 
    puts "Code 2" 
end 

出力:

Code 2 
Code 2 
+0

ちょうど私が@Mike Bethanyのコメントの後にちょっとした質問を更新しました。 – user502052

+0

ああ、それは私が思ったものの、推測したくないものです。その場合、フラグ変数は冗長で、 'if a'だけをテストできます。 –

0

あなたはirbに出てこの種のものを試すことができます。

>> if false 
>> foo = "bar" 
>> end 
=> nil 
>> foo 
=> nil 

ですから、if条件が偽であっても、foo変数は(導入され、それが処理されますnil、であることがわかりますiffalseと同じですので、安全です)。これは、ifステートメントで新しいスコープが導入されていないためです。参照:

>> if true 
>> bar = "baz" 
>> end 
=> "baz" 
>> bar 
=> "baz" 

最後にひとつの思考:Aは本当にただブールの場合は、flag = Aを設定し、完全ifを避けることができます。

+0

ちょうど私が@Mike Bethanyのコメントの後にちょっとした質問を更新しました。 – user502052

関連する問題