Home > Blockchain >  scala multi dimensional array representation in repl
scala multi dimensional array representation in repl

Time:09-24

I am new to scala and I wrote this in repl

val xx = Array.ofDim [String](3,4) 
xx: Array[Array[String]] = Array(Array(null, null, null, null), Array(null, null, 
         null, null), Array(null, null, null, null))

@ val yy = Array.ofDim [Int](3,4) 
  yy: Array[Array[Int]] = Array(Array(0, 0, 0, 0), Array(0, 0, 0, 0), Array(0, 0, 0, 0))

@ val ss = Array(xx, yy) 

which resulted in this

ss: Array[Array[_1] forSome { type _1 >: Array[Int] with Array[String] <: Array[_1] forSome { type _1 >: Int with String } }] = Array(
Array(Array(null, null, null, null), Array(null, null, null, null), Array(null, null, null, null)),
Array(Array(0, 0, 0, 0), Array(0, 0, 0, 0), Array(0, 0, 0, 0))
)

can someone please explain what does this mean

Array[_1] forSome { type _1 >: Array[Int] with Array[String] <: Array[_1] forSome { type _1 >: Int with String } }

specially the >: .....<: .... part. by the way I am using scala 2.13.

cheers,

es

CodePudding user response:

The forSome keyword in Scala creates an existential type. That is a type that you don't know or don't care what it precisely is, you can just provide conditions for it. More in this answer.

The <: and :> operators mean type bound. A definition like type A <: B means, that type A is a subtype of B. And the definition type A >: B means that A is a supertype of B.

In this case (last snippet), it means that you have an Array with a parameter _1 about which we know that it is a supertype of Array[Int] with Array[String] and a subtype of Array[_1] forSome { type _1 >: Int with String }

  • Related