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, botów: 0