Ruby では、コードが定義されていない場合x = x
にローカル変数x
を初期化することに気付きました。これは、たとえば、ERB テンプレートで使用して、ローカル変数が定義されていて、「真っぽい」値を持っているかどうかを確認できます。nil
x
<% if header = header %>
<h1><%= header %></h1>
<% end %>
それで、これは機能ですか、それともバグですか?それはどこかに文書化されていますか?
Ruby では、コードが定義されていない場合x = x
にローカル変数x
を初期化することに気付きました。これは、たとえば、ERB テンプレートで使用して、ローカル変数が定義されていて、「真っぽい」値を持っているかどうかを確認できます。nil
x
<% if header = header %>
<h1><%= header %></h1>
<% end %>
それで、これは機能ですか、それともバグですか?それはどこかに文書化されていますか?
これはうまくいくかもしれませんが、それはあなたの意図を偽装していると思います。
何かが定義されているかどうかを確認したい場合は、次のように言う必要があります
if defined?(header) && header
ただし、パーシャルでは、通常、テンプレートの先頭ですべての値をデフォルトにします
例(haml付き)
- # input header is optional
- header ||= nil
- if header
%h1 This is the header
%p this is the rest of the partial
これは機能でもバグでもありません。ローカル変数を呼び出すことで、ローカル変数の真偽を簡単にテストできます。初期化されていない場合は、デフォルトでnilが返されます。
<% if header %>
<h1><%= header %></h1>
<% end %>