我想检查我的对象@objectname
何时不等于null以显示@objectname
else的值以显示未找到任何值。
我试过这个:
<% if (@objectname != null) then %>
但我收到了一个错误。
它是nil
in Ruby,而不是null
。并且足以说if @objectname
测试它是否不是零。而且没有then
。你可以在这里找到有关if
语法的更多信息:
http://en.wikibooks.org/wiki/Ruby_Programming/Syntax/Control_Structures#if
您可以通过调用present检查对象是否为nil(null)?还是空白? 。
@object.present?
如果项目为空字符串或为零,则返回false。
或者你可以使用
@object.blank?
这和现在一样吗?如果你不喜欢'除非',你就可以使用它。对于空字符串或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
在你的例子中,你可以简单地用`nil替换null
,它会正常工作。
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/并搜索“空白?”,你会看到它定义了什么对象以及它是如何工作的。查看definition on Object,我们看到“如果对象为空,如果它是假的,空的或空白字符串,则为空。例如,”“,”“,nil,[]和{}都是空白的。”你应该确保这是你想要的。
此外,nil被认为是假的,除了false和nil之外的任何东西都被认为是真的。这意味着您可以直接将对象放在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