2013-11-29 2 views
1

Для следующего метода, что является способ проверить, если входящий массив не является None (так называемый нулевой сюда ява земля ..)Scala как шаблон матч для None массива

val x = Array(22.0,122,222,322,422,522,622,722,822,922) 
def stddev(arr :Array[Double]) = { 
    arr match { 
    case None => 0 
    .. 

Ошибка:

<console>:11: error: pattern type is incompatible with expected type; 
found : None.type 
required: Array[Double] 
Note: if you intended to match against the class, try `case _: <none>` 
      case None => 0 
       ^

ответ

4

null не соответствует None. Вы должны обернуть массив в Option:

Option(arr) match { 
    case Some(a) => ... 
    case None => ... 
} 

Option(null) возвращает None

Более полный пример:

def printDoubles(arr: Array[Double]) { 
    Option(arr) match { 
     case Some(Array()) => println("empty array") 
     case Some(a) => println(a mkString ", ") 
     case None => println("array is null") 
    } 
} 

printDoubles(null) // array is null 
printDoubles(Array.empty) // empty array 
printDoubles(Array(1.0, 1.1, 1.2)) // 1.0, 1.1, 1.2 
+0

Ok это правильно, ТНХ. Pls рассматривает вопрос о повышении. – javadba

Смежные вопросы