パターンマッチングを使ってスカラーのリストの最後の要素を探しています。私は、この問題は他の方法を用いて解くことができる知っているが、使用リストの最後の要素を見つけるためのパターンマッチング
(見出さNil.typeがAを必要とする)、次のコード
def last[A](list: List[A]):A = list match {
case head :: Nil => head
case head :: tail => last(tail)
case _ => Nil
}
に、すなわちケース_ => nilの型の不一致などのエラーを投げている最後のケースを試しパターンマッチングだけがこれを解決する方法ですか?
リストは汎用タイプなので、NilをタイプAのデフォルト値で置き換えることはできません。これは実行時にのみ決定できます。
この行を削除する:case _ => Nilは明らかに機能しますが、Nil引数の場合には失敗するという警告が表示されます。
このシナリオでNil引数を処理するにはどうすればよいですか?
(我々はオプションの使用を避けることができるように)一般的なタイプのために、ここ(Javaでのように)「ヌル」に似たものを指定する方法はありますか? – Shashank
「null」のコンセプトを削除することが推奨されるため、お勧めしません。最後の要素は 'some value'でも' empty'でもよい。返された 'Option'値を操作する上で問題がありますか? 'returnedValue match {}'は返された最後の値を処理する方法です – prayagupd
Shashank、まれにこのようなことがパフォーマンスに大きな違いをもたらすかもしれませんが、それは慣用的なScalaではありません。この場合、AをAnyRef、すなわち 'last [A <:AnyRef]'に制限する必要があることに注意してください。 – AmigoNico