String#blank?
è molto utile, ma esiste in Rails, non in Ruby.C'è una stringa di Ruby # vuota? metodo?
C'è qualcosa di simile in Ruby, in sostituzione:
str.nil? || str.empty?
String#blank?
è molto utile, ma esiste in Rails, non in Ruby.C'è una stringa di Ruby # vuota? metodo?
C'è qualcosa di simile in Ruby, in sostituzione:
str.nil? || str.empty?
Afai K non c'è nulla di simile in chiaro Ruby. È possibile creare il proprio in questo modo:
class NilClass
def blank?
true
end
end
class String
def blank?
self.strip.empty?
end
end
questo lavoro per nil.blank?
e a_string.blank?
è possibile estendere questo (come rotaie fa) per gli oggetti vero/falso e generali:
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
Riferimenti:
https://github.com/rails/rails/blob/2a371368c91789a4d689d6a84eb20b238c37678a/activesupport/lib/active_support/core_ext/object/blank.rb#L57 https://github.com/rails/rails/blob/2a371368c91789a4d689d6a84eb20b238c37678a/activesupport/lib/active_support/core_ext/object/blank.rb#L67 https://github.com/rails/rails/blob/2a371368c91789a4d689d6a84eb20b238c37678a/activesupport/lib/active_support/core_ext/object/blank.rb#L14 https://github.com/rails/rails/blob/2a371368c91789a4d689d6a84eb20b238c37678a/activesupport/lib/active_support/core_ext/object/blank.rb#L47
E qui è la String.blank?
attuazione, che dovrebbe essere più efficiente di quella precedente:
Tale implementazione potrebbe essere resa più inefficiente. Provalo su "una stringa molto molto lunga ......" "solo per divertimento! –
È una pratica scarsa estendere NilClass? –
@BSeven Sì, e questa soluzione non funziona sulla varietà di oggetti utilizzata dal metodo Rails. Inoltre, come sottolineato da Marc-Andre, 'strip' è un po 'inefficiente (specialmente quando si butta via l'output) –
Supponendo che la stringa può essere messo a nudo, cosa c'è di sbagliato con come nell'esempio seguente:
2.0.0p0 :004 > ' '.nil? or ' '.strip.empty?
=> true
Si può sempre fare esattamente quello che fa Rails. Se si guarda a the source to blank
, si vede si aggiunge il seguente metodo per Object
:
# File activesupport/lib/active_support/core_ext/object/blank.rb, line 14
def blank?
respond_to?(:empty?) ? empty? : !self
end
Vale la pena ricordare che il codice è stato adattato a 'respond_to? (: Vuoto?)? !!vuoto? :! self? nelle versioni più recenti. –
No tale funzione esiste in Ruby, ma c'è una proposta attivo per String#blank?
su ruby-core.
Nel frattempo, è possibile utilizzare questa implementazione:
class String
def blank?
!include?(/[^[:space:]]/)
end
end
Questa implementazione sarà molto efficace, anche per stringhe molto lunghe.
Non vedo nulla di simile nel riferimento http://ruby-doc.org/core-2.0/String.html – shishirmk
Vedere questa risposta per alcune informazioni: http://stackoverflow.com/questions/4819899/rails -objectblank-vs-stringempty-confusion – squiguy
Possibile duplicato: http://stackoverflow.com/questions/247948/is-there-a-better-way-of-checking-nil-or-length-0-of-a- string-in-ruby – christianblais