zoukankan      html  css  js  c++  java
  • rails nil blank

    up vote 7 down vote favorite
    1

    I find myself repeatedly looking for a clear definition of the differences of nil?, blank?, and empty? in Ruby on Rails. Here's the closest I've come:

    blank? objects are false, empty, or a whitespace string. For example, "", " ", nil, [], and {} are blank.

    nil? objects are instances of NilClass.

    empty? objects are class-specific, and the definition varies from class to class. A string is empty if it has no characters, and an array is empty if it contains no items.

    Is there anything missing, or a tighter comparison that can be made?

    link|flag

     
      
     
    add comment
     
    start a bounty
    up vote 17 down vote accepted

    .nil?

    can be used on any object and is true if the object is nil

    .empty?

    can be used on strings, arrays and hashes and returns true if:

    • String length == 0
    • Array length == 0
    • Hash length == 0

    running .empty? on something that is nil will throw a NoMethodError

    That is where .blank? comes in. It is implemented by Rails and will operate on any object as well as work like .empty? on strings, arrays and hashes.

    nil.blank? == true
    [].blank? == true
    {}.blank? == true
    "".blank? == true
    5.blank? == false

    .blank? also evaluates true on strings which are non-empty but contain only whitespace.

    "  ".blank? == true
    "  ".empty? == false
    link|flag
     
    1
     
    As mentioned in the question, some non-empty strings count as blank. – Andrew Grimm May 20 '09 at 23:20
     
     
    Thanks for catching that. – Corban Brook May 21 '09 at 19:47
     
    add comment
    up vote 2 down vote

    One difference is that .nil? and .empty? are methods that are provided by the programming language Ruby, whereas .blank? is something added by the web development framework Rails.

    link|flag
     
      
     
    add comment
    up vote 2 down vote

    Don't forget any? which is generally !empty?. In Rails I typically check for the presence of something at the end of a statement with if something or unless something then use blank? where needed since it seems to work everywhere.

    link|flag
     
    2
     
    .any? doesn't work with strings in ruby 1.9, as .any? requires enumerable, and string#each by itself doesn't work in ruby 1.9. – Andrew Grimm May 20 '09 at 0:59
     
    add comment
    up vote 0 down vote

    Just a little note about the any? recommendation: He's right that it's generally equivalent to !empty?. However, any? will return true to a string of just whitespace (ala " ").

    And of course, see the 1.9 comment above, too.

    link|flag
     
      
     
    add comment
    up vote 0 down vote

    Quick tip: !obj.blank? == obj.present?

    Can be handy/easier on the eyes in some expressions

    link|flag
  • 相关阅读:
    delphiXE7关于android 检测屏幕是否处于关闭状态
    delphiXE7关于android API的使用和检测WIFI状态的问题
    关于Android下Delphi XE7获取通讯录的问题
    多线程操里操作webbrowser的 Frames
    关于游戏引擎
    今天博客开通了
    集合类型-集合
    编程语言
    live Python4笔记
    live Python3笔记
  • 原文地址:https://www.cnblogs.com/lexus/p/1864821.html
Copyright © 2011-2022 走看看