2016-07-21 5 views
0

Я новичок в искрообразовании с использованием scala и очень смущен обозначениями (x, y) в некоторых сценариях и x._1, y._1. Особенно, когда они используются один над другими в искровых преобразованияхпредставление значений (x, y) vs x._1, y._1

может кто-нибудь объяснить, есть конкретное эмпирическое правило, когда использовать каждый из этих синтаксисов

+0

Используйте '(x, y)' с правильным названием, поскольку его легче понять. – ipoteka

ответ

2

В основном есть 2 способа доступа к параметру кортежа в анонимном функция. Они функционально эквивалентны, используют любой метод, который вы предпочитаете.

  1. через атрибуты _1, _2 ...
  2. Через шаблону в переменную с именем содержательного

    val tuples = Array((1, 2), (2, 3), (3, 4)) 
    
    // Attributes 
    tuples.foreach { t => 
        println(s"${t._1} ${t._2}") 
    } 
    
    // Pattern matching 
    tuples.foreach { t => 
        t match { 
        case (first, second) => 
         println(s"$first $second") 
        } 
    } 
    
    // Pattern matching can also written as 
    tuples.foreach { case (first, second) => 
        println(s"$first $second") 
    } 
    
1

Обозначение (x, y) является кортеж из 2-х элементов, x и y. Существуют разные способы получения корневых примеров и синтаксиса getScala для отдельных значений в кортеже. Вы можете использовать ._1, ._2 обозначения, чтобы получить на элементах:

val tup = (3, "Hello") // A tuple with two elements 

val number = tup._1  // Gets the first element (3) from the tuple 
val text = tup._2   // Gets the second element ("Hello") from the tuple 

Вы также можете использовать поиск по шаблону. Один из способов, чтобы извлечь два значения, как это:

val (number, text) = tup 

В отличие от коллекции (например, List) кортеж имеет фиксированное число значений (это не всегда ровно два значения) и значения могут иметь разные (например, Int и String в приведенном выше примере).

Есть много учебников о кортежей Scala, например: Scala tuple examples and syntax.

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