orElse を使用して Option をチェーンした後、要素の型が変更され、期待どおりに使用できなくなったことがわかりました。
例: タイプが .xml のNodeSeq
.
scala> xml1.headOption map { head => None } orElse xml2.lastOption map {last => Some(last)}
res11: Option[Some[ScalaObject with Equals]] = Some(Some(None))
の前にorElse
、head
は typeNode
であり、これは正しいですが、 type であるlast
必要がありますNode
が、コンパイラはそれが typeであると見なし、パラメーターとして aを取る関数にScalaObject with Equals
渡すことができません。last
Node
を使用してキャストできますlast.asInstanceOf[Node]
が、このキャストを回避してlast
タイプを作成する方法はありNode
ますか?