このブロックをRubyに書き込む方法は1行ありますか?Rubyで各ブロックを1行にすることはできますか?
cats.each do |cat|
cat.name
end
私は自分のプロジェクトでコードの量を減らそうとしています。私はRuby 1.9.2を使用しています。
ありがとうございます!
このブロックをRubyに書き込む方法は1行ありますか?Rubyで各ブロックを1行にすることはできますか?
cats.each do |cat|
cat.name
end
私は自分のプロジェクトでコードの量を減らそうとしています。私はRuby 1.9.2を使用しています。
ありがとうございます!
はい、あなたが書くでしょう:
cats.each { |cat| cat.name }
またはsimplyを:
cats.each(&:name)
注Enumerable#each
はあなたが反復処理されている同じオブジェクト(cats
)を返すので、それだけでそれを使用することは理にかなっていることはあなたがブロック内で何らかの副作用をしているならば。それが来るとき、二つの異なるコーディングスタイルがある
cats.each do |cat| cat.name end
注:
cat_names = cats.map(&:name)
ちょうど改行を削除します。あなたの代わりにEnumerable#map表現を使用しますので、ほとんどの場合、あなたは、猫の名前を取得したいですブロックに。一つのコーディングスタイルは常にに複数のラインとシングルラインブロックの常に使用{
/}
にまたがるブロックのための使用do
/end
を言います。あなたがその学校に従うならば、あなたは
cats.each {|cat| cat.name }
を書く必要があり、他のスタイルは常にに主のために実行されたブロックのために、主にその副作用のために実行されたブロックのためdo
/end
を使用して{
/}
です戻り値each
はブロックの戻り値を破棄するため、副作用のブロックを渡すのが理にかなっているため、その学校に従う場合は、do
/end
と書いてください。
しかし@toklandは言及して、より多くの慣用的な方法は、私は、レールコンソール/ IRBに使用するもう一つのトリックはでコマンドを分離することである
cats.each(&:name)
を書くことであろう「;」例えばあまりにもそれを行う必要があります
[1,2].each do |e| ; puts e; end
for cat in cats;cat.name;end
。
これは非常に醜いです、受け入れられた答えを見てください。あなたは ";"可能な限りコードを読みやすくするために使用します。または、少なくともラインジャンプにスペースを追加する。また、 "ブロック1ライナー"のために質問してください。 –
このお試しくださいcats.each {| cat | cat.name} –