Что это за тип данных, val one = (1,2,3) - PullRequest
2 голосов
/ 02 августа 2011

Несколько примеров ... на REPL в Scala.

Я полностью забыл набрать Array при создании экземпляра объекта Array (пытаясь проверить оператор ++).

В любом случае, теперь мне интересно, что это за тип данных?

val one = (1,2,3) 

Или какая структура данных или контейнер является кодом выше? Что это за звонок? Почему это полезно? Я не верю, что REPL дал какую-либо полезную информацию о коде выше.

Спасибо, что уделили время.

Ответы [ 3 ]

7 голосов
/ 02 августа 2011

Это специальный синтаксис для создания объекта Tuple3. Это эквивалентно

val one = Tuple3[Int, Int, Int](1, 2, 3)

Кортежи определены до Tuple22. Одним из важных вариантов использования кортежей является возврат нескольких значений из функции. Кортежи также могут быть распакованы со специальным синтаксисом:

scala> val (a, b, c) = one
a: Int = 1
b: Int = 2
c: Int = 3
7 голосов
/ 02 августа 2011

Это экземпляр Tuple3 . Кортежи можно рассматривать как неизменяемый массив фиксированного размера, в котором каждый элемент может иметь другой статический проверенный тип во время компиляции.

В вашем примере это точно:

Tuple3[Int, Int, Int]

Но вы также можете создавать кортежи разных типов:

val one = (1, false, "a")

В этом случае:

one._1    // 1, Int type
one._2    // false, Boolean
one._3    // "a", String

Кортежи имеют различные варианты использования. В основном они используются для возврата двух значений (реже, чаще) из функции. Вы можете использовать массив или список, но тогда все элементы должны быть одного типа (в худшем случае Any), поэтому вы теряете проверку статического типа. Также нет гарантии размера такой последовательности, в то время как кортеж имеет фиксированный размер, известный во время компиляции.

Относитесь к кортежам как к легким временным объектам, но не злоупотребляйте ими. Например, не используйте Tuple3 для обозначения дня / месяца / года.

1 голос
/ 02 августа 2011

Это Tuple3 [Int, Int, Int]

val one = (1,2,3) 
val two = Tuple3(1, 2, 3)
two == one // true
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...