10

String#blank?非常に便利ですが、Ruby ではなく Rails に存在します。

置き換えるために、Rubyにそのようなものはありますか:

str.nil? || str.empty?
4

6 に答える 6

16

私の知る限り、普通のRubyにはこのようなものはありません。次のように独自に作成できます。

class NilClass
  def blank?
    true
  end
end

class String
  def blank?
    self.strip.empty?
  end
end

これは機能しnil.blank?a_string.blank?true/false および一般的なオブジェクトに対してこれを拡張できます (レールのように):

class FalseClass
  def blank?
    true
  end
end

class TrueClass
  def blank?
    false
  end
end

class Object
  def blank?
    respond_to?(:empty?) ? empty? : !self
  end
end

参考文献:

https://github.com/rails/rails/blob/2a371368c91789a4d689d ​​6a84eb20b238c37678a/activesupport/lib/active_support/core_ext/object/blank.rb#L57 https://github.com/rails/rails/blob/2a371368c91789a4d689d​​6a84eb20b20b238ac アクティブ ライブラリ/active_support/core_ext/object/blank.rb#L67 https://github.com/rails/rails/blob/2a371368c91789a4d689d ​​6a84eb20b238c37678a/activesupport/lib/active_support/core_ext/object/blank.rb#L14 https://github.com /rails/rails/blob/2a371368c91789a4d689d​​6a84eb20b238c37678a/activesupport/lib/active_support/core_ext/object/blank.rb#L47

そして、String.blank?これは前のものよりも効率的なはずの実装です:

https://github.com/rails/rails/blob/2a371368c91789a4d689d​​6a84eb20b238c37678a/activesupport/lib/active_support/core_ext/object/blank.rb#L101

于 2013-05-02T00:16:05.053 に答える
4

Railsとまったく同じことがいつでもできます。のソースをblank見ると、次のメソッドが に追加されていることがわかりますObject

# File activesupport/lib/active_support/core_ext/object/blank.rb, line 14
  def blank?
    respond_to?(:empty?) ? empty? : !self
  end
于 2013-05-02T01:55:50.530 に答える
2

String#blank?Ruby にはそのような機能はありませんが、 on ruby​​-coreの活発な提案があります。

それまでの間、次の実装を使用できます。

class String
  def blank?
    !include?(/[^[:space:]]/)
  end
end

この実装は、非常に長い文字列の場合でも非常に効率的です。

于 2013-05-02T13:23:34.510 に答える
0

これを探している新しい人は、simple_ext gem を使用できます。この gem は、Rails の Array、String、Hash などのオブジェクトですべての Ruby コア拡張機能を使用するのに役立ちます。

require 'simple_ext'
str.blank?
arr.blank?
... etc.
于 2020-02-09T14:18:08.657 に答える