Scala, как указать возвращаемый тип кортежа в кортеже

Я пытаюсь указать возвращаемый тип кортежа внутри кортежа:

  class First {
    def tupleReturnType(): (Any, Int) = {
      val tup = (1, 2, 3) // This can be variable in length
      val i = 4
      (tup, i)   
    }
  }

и назовите его, например:

  "First Test" must "understand tuple type" in {
    val first = new First()
    val (tup, i) = first.tupleReturnType()
    assert(tup == (1, 2, 3))
    assert(i == 4)   
  }

Я могу скомпилировать это, используя тип Any, но я бы предпочел что-то конкретное. Какие-либо предложения? Я исследовал, но не нашел этот конкретный вопрос в другом месте.

Я попробовал () как тип, но получил ошибку компиляции.

3 метода стилизации элементов HTML
3 метода стилизации элементов HTML
Когда дело доходит до применения какого-либо стиля к нашему HTML, существует три подхода: встроенный, внутренний и внешний. Предпочтительным обычно...
Формы c голосовым вводом в React с помощью Speechly
Формы c голосовым вводом в React с помощью Speechly
Пытались ли вы когда-нибудь заполнить веб-форму в области электронной коммерции, которая требует много кликов и выбора? Вас попросят заполнить дату,...
Стилизация и валидация html-формы без использования JavaScript (только HTML/CSS)
Стилизация и валидация html-формы без использования JavaScript (только HTML/CSS)
Будучи разработчиком веб-приложений, легко впасть в заблуждение, считая, что приложение без JavaScript не имеет права на жизнь. Нам становится удобно...
Flatpickr: простой модуль календаря для вашего приложения на React
Flatpickr: простой модуль календаря для вашего приложения на React
Если вы ищете пакет для быстрой интеграции календаря с выбором даты в ваше приложения, то библиотека Flatpickr отлично справится с этой задачей....
В чем разница между Promise и Observable?
В чем разница между Promise и Observable?
Разберитесь в этом вопросе, и вы значительно повысите уровень своей компетенции.
Что такое cURL в PHP? Встроенные функции и пример GET запроса
Что такое cURL в PHP? Встроенные функции и пример GET запроса
Клиент для URL-адресов, cURL, позволяет взаимодействовать с множеством различных серверов по множеству различных протоколов с синтаксисом URL.
3
0
254
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Я считаю, что это меняется в Scala 3/Dotty, но на данный момент кортежи — это экземпляры класса TupleN с N = 1, 2, 3, ..., 22. Итак, чтобы достичь того, чего вы хотите, вам понадобится какой-то родительский тип, который инкапсулирует все типы кортежей.

Вот как выглядит Tuple3:

final case class Tuple3[+T1, +T2, +T3](val _1 : T1, val _2 : T2, val _3 : T3) extends scala.AnyRef with scala.Product3[T1, T2, T3] with scala.Product with scala.Serializable {
  override def toString() : java.lang.String = { /* compiled code */ }
}

Здесь мы видим, что ближайшим общим супертипом экземпляров TupleN является scala.Product, поэтому можно сказать:

def tupleReturnType(): (Product, Int) 

Спасибо - я попробовал это, и это сработало - у вас есть ссылка на заметки об изменении для Scala 3?

Mazerunner72 22.05.2019 12:07

Другие вопросы по теме