Geo*_*ayi 41 ruby ruby-on-rails ruby-on-rails-2
我想检查我的对象何时@objectname不等于null以显示@objectnameelse 的值以显示未找到任何值.
我试过这个:
<% if (@objectname != null) then %>
Run Code Online (Sandbox Code Playgroud)
但我收到了一个错误.
Pav*_*ler 56
它nil在Ruby中,而不是null.这足以if @objectname说明它是否不是零.不,不then.您可以在if此处找到有关语法的更多信
http://en.wikibooks.org/wiki/Ruby_Programming/Syntax/Control_Structures#if
les*_*sce 39
您可以通过调用present检查对象是否为nil(null)?还是空白?.
@object.present?
Run Code Online (Sandbox Code Playgroud)
如果项目为空字符串或为零,则返回false.
或者你可以使用
@object.blank?
Run Code Online (Sandbox Code Playgroud)
这和现在一样吗?如果你不喜欢'除非',你就可以使用它.对于空字符串或nil,这将返回true.
Chl*_*loe 12
现在使用Ruby 2.3,您可以使用&.operator('lonely operator')nil在访问值的同时进行检查.
@person&.spouse&.name
Run Code Online (Sandbox Code Playgroud)
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)
Run Code Online (Sandbox Code Playgroud)
代替
@person.spouse.name if @person && @person.spouse
Run Code Online (Sandbox Code Playgroud)
在您的示例中,您可以简单地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"
Run Code Online (Sandbox Code Playgroud)
与其他海报所说的相反,你可以看到上面then在Ruby 中运行良好.这不常见,但很好.
#blank?并#present?有其他影响.具体来说,如果对象响应#empty?,他们将检查它是否为空.如果您访问http://api.rubyonrails.org/并搜索"blank?",您将看到它定义的对象及其工作原理.查看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"
Run Code Online (Sandbox Code Playgroud)
如果您明确需要检查nil而不是false,则可以使用该#nil?方法,其中nil是唯一会导致返回true的对象.
nil.nil? # => true
false.nil? # => false
Object.new.nil? # => false
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
113901 次 |
| 最近记录: |