1
Можете ли вы мне помочь в понимании поведениякортежей в Scala не работают, как ожидалось
//Creating a tuple
val myTuple = ("Sudipta","Deb","Switzerland",1234)
//> myTuple : (String, String, String, Int) = (Sudipta,Deb,Switzerland,1234)
myTuple._2 //> res0: String = Deb
myTuple._4 //> res1: Int = 1234
val (first, second, third, fourth) = myTuple //> first : String = Sudipta
//| second : String = Deb
//| third : String = Switzerland
//| fourth : Int = 1234
//val (first1, second1, _) = myTuple
Сейчас последняя строка дает мне ошибку:
constructor cannot be instantiated to expected type; found : (T1, T2, T3) required: (String, String, String, Int)
моему вопрос, почему он ведет себя как это? В Scala для нетерпеливых книг это то, что написано:
You can use a _ if you don’t need all components:
val (first, second, _) = t
Просто для справки, если вы хотите, чтобы увидеть полный код, он находится в моем GitHub Repository. Ссылка: Scala Worksheet
Ok. Понял. Значит, это не похоже на var args в Java? Если мне нужно поставить _ для каждого неиспользуемого члена кортежа, значит, мне нужно знать, сколько элементов есть в Tuple, не так ли? –
Нет похожих шаблонов в функциональных языках. Если этого недостаточно, вы можете заменить кортеж классом и использовать его функции выбора для доступа к членам. Если данные просты, вы можете создать класс case, который очень похож на кортеж. –
Это как раз шаблон. Сравнить 'val is = List (1,2,3,4); val List (x, y, _ *) = is'. Так что да, для обычного TupleN вы должны знать arity N. –