編集
OK、@dhg は、fold() へのコード ブロックが val にバインドされていない場合にドット メソッド構文が必要であることを発見しました (同じコード ブロックで reduce() を使用すると、スペース メソッド構文を使用できる理由はわかりません)。 )。いずれにせよ、最終結果は非常に簡潔です。
result.map { row =>
addLink( row.href, row.label )
}.fold(NodeSeq.Empty)(_++_)
これは、元の質問をある程度否定します。つまり、多くの場合、いずれかまたは両方のシナリオを高次から切り離し、「太い」反復的な if/else ステートメントを避けることができます。
ORIGINAL
List[T] のような空の可能性のあるコレクションを操作する場合の if/else 処理を削減しようとしています
たとえば、最新のニュース記事を取得してhtml newsのNodeSeq<li><a>links</a></li>
を作成する必要があるとします。
val result = dao.getHeadlines // List[of model objects]
if(result.isEmpty) NodeSeq.Empty
else
result map { row =>
addLink( row.href, row.label ) // NodeSeq
} reduce(_ ++ _)
これは問題ありませんが、非常に簡潔ですが、次のいずれかまたは両方のケースに対処するために、三項スタイルに移行したいと考えています。
result.isEmpty ? NodeSeq.Empty :
result map { row =>
addLink( row.href, row.label )
} reduce(_ ++ _)
三項をブール値にポンピングするという古い投稿を見たことがありますが、if/elseを合理化するための代替手段があれば知りたいですか?
match {...}
IMOは、このシナリオでは少し肥大化しており、for {...} yield
あまり役に立たないようです.