Scala использует java.lang.reflect.Array.newInstance
для динамического создания массивов при вызове map
. Этот метод не принимает размер ноль . так как ваша лямбда возвращает пустой массив типа Array[Unit]
, который при нулевом размере вы получаете исключение при вызове внешней карты.
Кстати, в этом примере вам действительно следует использовать foreach
, поскольку вы не пытаетесь сопоставить массив с другим массивом, а используете побочные эффекты:
scala> myTable.foreach(_.foreach(elem => if(3 > result) result = 3))
scala> result
res21: Int = 3
Редактировать: Я неправильно понял проблему (см. MatthieuF ответ). Проблема не в размере массива, а в его типе. Можно воспроизвести проблему с помощью:
scala> java.lang.reflect.Array.newInstance(classOf[Unit], 1)
java.lang.IllegalArgumentException
at java.lang.reflect.Array.newArray(Native Method)
at java.lang.reflect.Array.newInstance(Array.java:52)
at .<init>(<console>:8)
...