Scala - konstruktor

0

Cześć

Jestem dosyć początkujący w Scali i napisałem taki przykład:

class Test(i: Int = 0) {
  def ++() = new Test(i + 1)
}

Widziałem jednak konstrukcję działającą na zasadzie:

class Test(i: Int = 0) {
  def ++() = (i + 1): Test
}

A najchętniej chciałbym zrobić coś takiego

class Test(i: Int = 0, s: String = "Hello") {
  def ++() = (i = i + 1): Test
}

Wiem, że drugi przykład jest jak najbardziej możliwy. Co do trzeciego nie jestem pewny. Próbowałem różnych sposobów i konstrukcji, jednak nie udało mi się otrzymać takiego efektu (jakby Tuple miał być przekazywany do konstruktora?)

Pozdrawiam ;)

0
class Test(i: Int = 0, s: String) {
  
  implicit def TestFromTuple(t: (Int, String)) = new Test(i, s)

  def ++(): Test = (i + 1, ""): Test
}

Proszę o zamkniecie

1
class Test(i: Int = 0, s: String) {
 
  implicit def TestFromTuple(t: (Int, String)) = new Test(i, s)
 
  def ++(): Test = (i + 1, ""): Test
}

Nie jest to do końca najlepsze rozwiązanie, chyba że faktycznie chcesz użyć implicit, masz ku temu powód i wiesz jak działa. Jeżeli dopiero zaczynasz naukę, polecałbym zapoznać się z tematem "Companion objects". Dzięki temu można tworzyć konstruktory z dowolnymi parametrami w tym touple i to wystarczy w zupełności temu co chcesz osiągnąć. W tym przypadku możesz zrobić np. tak:

object Test{
  def apply(i: Int, s: String = "Hello"): Test = new Test(i, s)
  def apply(t: (Int, String)): Test = new Test(t._1, t._2)
}

class Test(i: Int, s: String){
  def ++(): Test = Test(i + 1, s)
}

Ale to tylko luźna propozycja ;)

1 użytkowników online, w tym zalogowanych: 0, gości: 1