Как определить список списков в Scala?

Определенно стоит изучить или энергию или emacs. Также стоит учиться печатать слепым методом. В обоих случаях причинами является то же: Ваши взгляды больше не прерываются механическим процессом получения Вашего кода на экран .

относительно того, как запустить, просто погрузиться в и начать использовать энергию для всего.

P.S. Дебаты emacs-vs-vi бесконечны. Я использовал emacs в течение 26 лет. Если бы я запустил снова сегодня, то я изучил бы энергию потому что (a) это поправилось и (b) существуют много, меньше модифицирующих клавиш (Ctl-Alt-V, любой) и пользователи энергии, кажется, получает намного меньше травмы ввода.

9
задан 29 August 2009 в 04:29
поделиться

4 ответа

В обоих ваших примерах один список содержит одно число, которое является Int (последний 1 в первом случае и 2 как первый элемент второго list), остальные числа - двойные. Следовательно, предполагаемым типом элементов списка будет AnyVal, который является первым общим супертипом из них, поэтому ваш внешний список станет List [List [AnyVal]].

Если вы также попробуете его с scala 2.8, тогда он должен использовать Numeric вместо AnyVal, поскольку он стал супертипом как Double, так и Int. Большинство числовых операций (в вашем случае умножение) также будут работать с ними.

Чтобы решить вашу проблему с 2.7.x, просто используйте Doubles для этих значений (1.0 или 1D).

Явное объявление типа как List [List [ Double]], вероятно, тоже поможет. В этом случае введенные вами значения Int будут преобразованы в двойные.

8
ответ дан 4 December 2019 в 13:48
поделиться

Эта ссылка может оказаться полезной: http://debasishg.blogspot.com/2009/01/higher-order-abstractions-in-scala-with.html

По приведенной выше ссылке приведен пример создания списка списков:

val brs: List[List[String]] =
  List(List("dave", "john", "sam"), List("peter", "robin", "david"), List("pras", "srim"))

Итак, для решения вашей проблемы вы можете иметь:

var y : List[List[Float]] = ...

Таким образом вы устраните все проблемы с выводом типа.

5
ответ дан 4 December 2019 в 13:48
поделиться

Пара замечаний:

F:\prog\scala\scala-2.8.0.r18341-b20090718020201\bin>scala
Welcome to Scala version 2.8.0.r18341-b20090718020201 (Java HotSpot(TM) 64-Bit Server VM, Java 1.6.0_13).
Type in expressions to have them evaluated.
Type :help for more information.

scala> var z = List(List (1.0, 2.2), List(2, 1.1, -2.1))
z: List[List[AnyVal]] = List(List(1.0, 2.2), List(2, 1.1, -2.1))

scala> var z = List(List (1.0f, 2.2f), List(2f, 1.1f, -2.1f))
z: List[List[Float]] = List(List(1.0, 2.2), List(2.0, 1.1, -2.1))

Значение, подобное вопросу « Java: моему методу нужен тип double вместо float? »:

'f' в конце числа делает его числом с плавающей запятой вместо двойного.
Java не будет автоматически сужать число double до числа с плавающей запятой.


scala> var z = (1.0f :: 2.2f :: Nil) :: (2f :: 1.1f :: -2.1f :: Nil) :: Nil
z: List[List[Float]] = List(List(1.0, 2.2), List(2.0, 1.1, -2.1))

тоже работает


Простого добавления явного типа было бы недостаточно:

scala> var z2 : List[List[Float]] = List(List(1.0, 2.2), List(2, 1.1, -2.1))
<console>:4: error: type mismatch;
 found   : Double(1.0)
 required: Float
       var z2 : List[List[Float]] = List(List(1.0, 2.2), List(2, 1.1, -2.1))
                                              ^
<console>:4: error: type mismatch;
 found   : Double(2.2)
 required: Float
       var z2 : List[List[Float]] = List(List(1.0, 2.2), List(2, 1.1, -2.1))
                                                   ^
<console>:4: error: type mismatch;
 found   : Double(1.1)
 required: Float
       var z2 : List[List[Float]] = List(List(1.0, 2.2), List(2, 1.1, -2.1))
                                                                 ^
<console>:4: error: type mismatch;
 found   : Double(-2.1)
 required: Float
       var z2 : List[List[Float]] = List(List(1.0, 2.2), List(2, 1.1, -2.1))
                                                                      ^

То же самое и с одной единственной переменной:

scala> var f : Float = -2.1
<console>:4: error: type mismatch;
 found   : Double(-2.1)
 required: Float
       var f : Float = -2.1
                       ^

scala> var f : Float = -2.1f
f: Float = -2.1
1
ответ дан 4 December 2019 в 13:48
поделиться
var y:List[List[Double]] = List(List (1.0, 2.2), List(2, 1.1, -2.1))

y(0)(0)*2
0
ответ дан 4 December 2019 в 13:48
поделиться
Другие вопросы по тегам:

Похожие вопросы: