オブジェクト@objectname
がnullに等しくないときにチェックして、@objectname
elseの値を表示し、値が見つからなかったことを示します。
私はこれを試しました:
<% if (@objectname != null) then %>
しかし、エラーが発生します。
rubyのnil
ではなく、null
です。そして、if @objectname
nilではないかどうかをテストします。 then
もありません。 if
構文の詳細については、次を参照してください。
http://en.wikibooks.org/wiki/Ruby_Programming/Syntax/Control_Structures#if
Presentを呼び出すことで、オブジェクトがnil(null)かどうかを確認できますか?または空白? 。
@object.present?
プロジェクトが空の文字列またはnilの場合、これはfalseを返します。
または使用できます
@object.blank?
これは現在と同じですか?強打で、あなたが 'unless'が好きでないなら、それを使うことができます。これは、空の文字列またはnilに対してtrueを返します。
ここでRuby 2.3を使用すると、&.
演算子( 'lonely operator')は、値へのアクセスと同時にnil
をチェックします。
@person&.spouse&.name
https://en.wikibooks.org/wiki/Ruby_Programming/Syntax/Operators#Other_operators
つかいます #try
代わりに、nil
をチェックし続ける必要はありません。
http://api.rubyonrails.org/classes/Object.html#method-i-try
@person.try(:spouse).try(:name)
の代わりに
@person.spouse.name if @person && @person.spouse
あなたの例では、単にnull
を `nilに置き換えることができ、それはうまく動作します。
require 'erb'
template = <<EOS
<% if (@objectname != nil) then %>
@objectname is not nil
<% else %>
@objectname is nil
<% end %>
EOS
@objectname = nil
ERB.new(template, nil, '>').result # => " @objectname is nil\n"
@objectname = 'some name'
ERB.new(template, nil, '>').result # => " @objectname is not nil\n"
他のポスターが言ったこととは反対に、then
はRubyでうまく機能することが上でわかります。一般的ではありませんが、問題ありません。
#blank?
および#present?
その他の意味があります。具体的には、オブジェクトが#empty?
、彼らはそれが空かどうかをチェックします。 http://api.rubyonrails.org/ に移動して「blank?」を検索すると、定義されているオブジェクトとその動作が表示されます。 Objectの定義 を見ると、」と表示されます。 nil、[]、および{}はすべて空白です。」これが目的のものであることを確認する必要があります。
また、nilはfalseとみなされ、falseとnil以外はtrueとみなされます。これは、ifステートメントにオブジェクトを直接配置できることを意味します。したがって、上記のより標準的な記述方法は、
require 'erb'
template = <<EOS
<% if @objectname %>
@objectname is not nil
<% else %>
@objectname is nil
<% end %>
EOS
@objectname = nil
ERB.new(template, nil, '>').result # => " @objectname is nil\n"
@objectname = 'some name'
ERB.new(template, nil, '>').result # => " @objectname is not nil\n"
nil
ではなくfalse
を明示的にチェックする必要がある場合は、#nil?
メソッド。nilがtrueを返す唯一のオブジェクトです。
nil.nil? # => true
false.nil? # => false
Object.new.nil? # => false
単純なnotフラグを使用して、それを検証できます。例
if !@objectname
@objectnameがnilの場合、これはtrueを返します。あなたはドット演算子またはnil値を使用しないでください、そうでなければスローします
*** NoMethodError例外:未定義のメソッド `isNil? ' nil:NilClassの場合
理想的なnilチェックは次のようになります。
!@objectname || @objectname.nil? || @objectname.empty?