57

我想检查我的对象何时@objectname不等于 null 以显示@objectnameelse 的值以显示未找到任何值。

我试过这个:

<% if (@objectname != null) then %>

但我遇到了一个错误。

4

5 回答 5

71

nil在 Ruby 中,而不是null. 而且只要说if @objectname测试它是否不为零就足够了。没有then。您可以在此处找到有关if语法的更多信息:

http://en.wikibooks.org/wiki/Ruby_Programming/Syntax/Control_Structures#if

于 2012-04-29T11:27:30.017 回答
43

您可以通过调用 present? 来检查对象是否为 nil(null)?还是空白?.

@object.present?

如果项目是空字符串或 nil ,这将返回 false 。

或者你可以使用

@object.blank?

这和现在一样吗?一声巨响,如果您不喜欢“除非”,您可以使用它。这将为空字符串或 nil 返回 true 。

于 2012-04-29T11:34:45.387 回答
16

现在使用 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
于 2015-05-23T21:14:40.197 回答
5

在您的示例中,您可以简单地替换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/并搜索“空白?”,您将看到它定义在哪些对象上以及它是如何工作的。查看Object的定义,我们看到“如果对象为 false、空或空白字符串,则该对象为空白。例如,“”、“ ”、nil、[] 和 {} 都是空白的。” 你应该确保这是你想要的。

此外,nil 被认为是假的,除了假和 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 是唯一会导致 this 返回 true 的对象。

nil.nil?          # => true
false.nil?        # => false
Object.new.nil?   # => false
于 2012-04-29T14:33:02.413 回答
4

您可以使用简单的 not 标志来验证这一点。例子

if !@objectname

如果 @objectname 为 nil,这将返回 true。您不应该使用点运算符或 nil 值,否则它会抛出

*** NoMethodError 异常:未定义的方法 `isNil?' 对于零:NilClass

理想的 nil 检查如下:

!@objectname || @objectname.nil? || @objectname.empty?
于 2019-08-08T05:36:53.713 回答