2016-09-12 2 views
0

の型パラメータ:私はタイプパラメータで配列を置き換えることによって、それがより一般的な作りたいスカラ:私はNoneに空の配列を含むオプションを変換する関数持つコレクション

def emptyToNone[A](seqOpt: Option[Seq[A]]): Option[Seq[A]] = seqOpt match { 
    case Some(Seq()) => None 
    case _ => seqOpt 
} 

を、それ他のScalaコレクションと併用することができます。

私はこのようにそれを行うことができました:

def emptyToNone[C[A] <: Traversable[A], A](seqOpt: Option[C[A]]): Option[C[A]] = seqOpt match { 
    case Some(s) if s.isEmpty => None 
    case _ => seqOpt 
} 

しかし、私は2種類のパラメータを使用していた、CおよびA.私はここに関数のシグネチャを簡素化することができますか?

答えて

7

編集:@アレクセイの提案を含むように変更されました。

これは、1つの解決策が考えられます。

def emptyToNone[C <: Traversable[_]](seqOpt: Option[C]): Option[C] = 
seqOpt.filter(_.nonEmpty) 
+5

または簡素化する: 'seqOpt.filter(_空ではありません。)'。 –

+1

@AlexeyRomanov私は 'seqOpt.map(s => if if(s.nonEmpty)s else None)'は空のものを削除せず代わりにNoneを探していると思います。 – kali

+1

@kaliこれは型チェックしません(あるいは、それは 'Option [AnyRef]'を返します)。 –

関連する問題