無脂肪CRMのソースコードを勉強中です。アプリヘルパーの1つにあるこの特定のコード行が何をするのかを理解しようとしています:
options[:selected] = (@account && @account.id) || 0
オプション ハッシュの値をキー:selectedでインスタンス変数の値@accountまたは0(@account存在しない場合) に設定しているようです。
何をしているの&& @account.idですか?
無脂肪CRMのソースコードを勉強中です。アプリヘルパーの1つにあるこの特定のコード行が何をするのかを理解しようとしています:
options[:selected] = (@account && @account.id) || 0
オプション ハッシュの値をキー:selectedでインスタンス変数の値@accountまたは0(@account存在しない場合) に設定しているようです。
何をしているの&& @account.idですか?
虚偽でないことを確認して@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
それは書くことと同等であり、
options[:selected] = (@account != nil ? (@account.id != nil ? @account.id : 0) : 0)
ただし、Ruby プログラマーは、上記のコードが実際に判読不能になる可能性があることがわかるため、質問で示した方法を好みます。また、Ruby (および JavaScript などの他の動的プログラミング言語) には、簡潔で読みやすいコードを記述できるように、真値と偽値の概念があります。この記事でそれについて読むことができます:真実の質問.
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 に設定されます。