0

無脂肪CRMのソースコードを勉強中です。アプリヘルパーの1つにあるこの特定のコード行が何をするのかを理解しようとしています:

options[:selected] = (@account && @account.id) || 0

オプション ハッシュの値をキー:selectedでインスタンス変数の値@accountまたは0(@account存在しない場合) に設定しているようです。

何をしているの&& @account.idですか?

4

4 に答える 4

7

虚偽でないことを確認して@accountおり、そうでない場合は、オプションをアカウントの に設定しますid。長い手で書くと、これと同等になります:

options[:selected] = if @account && @account.id
                       @account.id
                     else
                       0
                     end

または

options[:selected] = (@account && @account.id) ? @account.id : 0

私はおそらく、次のように見える宝石を使用します。andand

options[:selected] = @account.andand.id || 0
于 2013-07-26T17:50:41.737 に答える
0

それは書くことと同等であり、

options[:selected] = (@account != nil ? (@account.id != nil ? @account.id : 0) : 0)

ただし、Ruby プログラマーは、上記のコードが実際に判読不能になる可能性があることがわかるため、質問で示した方法を好みます。また、Ruby (および JavaScript などの他の動的プログラミング言語) には、簡潔で読みやすいコードを記述できるように、真値と偽値の概念があります。この記事でそれについて読むことができます:真実の質問.

于 2013-07-26T17:52:22.637 に答える
0
options[:selected] = (@account && @account.id) || 0

このコード行は、or 0 ではなく、or 0 に設定さoptions[:selected]れます。その理由は、評価された最後のステートメントを返すためです。これは、両方が true の場合です。@account@account.id(@account && @account.id)@account.id

他の人が言ったように、最初に実際に存在(@account && @account.id)することを確認します。@account存在する場合は、短絡のおかげで、存在するかどうかを確認し、@account.id存在する場合はそれに設定options[:selected]します。ただし、@account存在しない場合、値は 0 に設定されます。

于 2013-07-27T01:43:26.860 に答える