2012-02-27 9 views

答えて

7

いいえ、その略語はありません。

def really_empty?(x) 
    x.strip.empty? 
end 

methodを使用します:

array.reject(&method(:really_empty?)) 

またはラムダを使用する:あなたは、メソッド定義することができ

really_empty = ->(x) { x.strip.empty? } 
array.reject(&really_empty) 

をしかし、あなたが持っていない限り、私はより良いものをのいずれかを呼び出すことはありませんロジックを分けることが理にかなっている十分な場所にreally_empty?を使用してください。あなたがRailsのを使用しているので、

しかし、あなただけ.strip.empty?の代わりにblank?を使用することもできます。彼らは非常に同等じゃないのでnil.strip.empty?はちょうどあなたの例外を手渡し一方nil.blank?が真実であること

array.reject(&:blank?) 

注意を。しかし、あなたはおそらくnilを拒否したいので、blank?を使っても良いかもしれません。 blank?false{}、および[]についてもtrueを返しますが、おそらく文字列の配列にその文字が含まれていない可能性があります。あなたがampex宝石でそれを行うことができます

+1

really_emptyを定義することもできますか?メソッドを "配列コンテンツクラス"(例えばString)上に作成し、それを空のメソッドのように使用します。私はこれをアドバイスしていない、ちょうどあなたができると言って.. – Johannes

2

それは上記のようなを書くことは非常にいいだろうが、それはサポートされている構文ではありません、あなたはto_procの構文を使用してチェーンの方法にしたいと思う道(&は:)そうのようなものです:

.map(&:strip).reject(&:empty?)

+1

けれども、私はそれがあるとして、あなたの元の例を使用することを選ぶでしょう。 –

+2

私はちょうど興味のある簡単なテストを実行し、それをあなたの元の方法でやっていることが、二重短縮方法と比べて2倍以上速いことがわかりました(これは別の一時配列を部分マップの)。 –

+0

'map'の前に' lazy'を呼び出すと、パフォーマンスが向上します。 – michau

1

:すべての現実ではなく、そのようにそれらを一緒にチェーンにしよう

require 'ampex' 
array.reject &X.strip.empty? 
関連する問題