9

私はこのテストをしたい:

if (line.blank?) do_stuff

...しかし、私はレールではなく、まっすぐなルビーにいます。同じ効果を達成するために受け入れられているイディオムは何ですか?

私は文字列に対してこれを行っています.emptyのテストはどこですか? .blank のテストと同じではありませんか? (すべて空白の文字列は空ではありませんが、空白です。)

4

6 に答える 6

9

blank?は String で定義されているだけでなく、2 つのテストであるため Nil の一部でもあります。nil?変数がまたはempty?/white space であるかどうかを確認します。

メソッドがないため、文字列が nil かどうかを問い合わせることはできませんがnil?、Nil が であるかどうかを問い合わせることはできますnil?

Active Support には利用可能なコア拡張機能があり、必要な機能を厳選して必要なメソッドを含めることができます。blank?あなたができることのために:

require 'active_support/core_ext/object/blank'

詳細についてはを参照しblank?、ドキュメント全体を読んで、他に何が利用できるかを確認してください。この方法で Active Support を使用すると、すべての AS をロードする必要がなくなり、便利な機能を取得できます。

于 2013-07-01T05:13:48.160 に答える
9

これは可能です:

line.to_s.strip.empty?
于 2013-07-01T04:16:16.837 に答える
7

アクティブサポートから

line !~ /[^[:space:]]/
于 2013-07-01T04:24:12.753 に答える
2

@sawaの回答に追加するには

pry(main)> Benchmark.ips do |x|
pry(main)*   x.report("strip") { "  ".strip.empty? }
pry(main)*   x.report("regex") { "  " !~ /\S/ }
pry(main)*   x.compare!
pry(main)* end
Warming up --------------------------------------
               strip   199.937k i/100ms
               regex   120.402k i/100ms
Calculating -------------------------------------
               strip      4.205M (± 3.6%) i/s -     21.193M in   5.047231s
               regex      2.019M (± 3.7%) i/s -     10.114M in   5.017202s

Comparison:
               strip:  4204798.7 i/s
               regex:  2018957.6 i/s - 2.08x  slower

if line.to_s.strip.empty?行く道もそうです

于 2018-08-14T19:32:08.150 に答える
0

blank?基本的にはチェックするだけempty? || nil?です。したがって、空のメソッドを自分で作成するか、条件で両方をチェックすることができます。

于 2013-07-01T04:12:12.337 に答える
0
if line.empty? || line.nil?

空欄で包めますか?あなたのラインクラスのメソッド

于 2013-07-01T04:13:06.413 に答える