2015-05-15 40 views
0

如果我訪問索引的Array的邊界之外,我得到一個ArrayIndexOutOfBoundsException,如:訪問Array的元素並返回monad?

val a = new Array[String](3) 
a(4) 
java.lang.ArrayIndexOutOfBoundsException: 4 

是否有返回一個單子,而不是一個方法(如:選項)?爲什麼Array的默認集合不支持這個方法?

回答

3

您可以使用lift

a.lift(4) // None 
a.lift(2) // Some(null) 

Array[T]PartialFunction[Int, T]lift創建一個從指數Function[Int, Option[T]]的元素類型的選擇。

+0

你的回答太快太快了 – Odomontois

1

你可以使用scala.util.Try

scala> val a = new Array[String](3) 
a: Array[String] = Array(null, null, null) 

scala> import scala.util.Try 
import scala.util.Try 

scala> val fourth = Try(a(3)) 
third: scala.util.Try[String] = Failure(java.lang.ArrayIndexOutOfBoundsException 
: 3) 

scala> val third = Try(a(2)) 
third: scala.util.Try[String] = Success(null) 

另一個好主意是不是首先使用數組,但是這是這個問題的範圍之外。

它與你的問題有關,但這是爲什麼這種行爲。數組旨在像Java數組一樣工作,並與Java數組兼容。由於這是Java數組的工作方式,因此這是Array如何工作的。