scala: przekazać null do generyka

0

To działa:

class Manager[A, B](produce: A => B) {

  def produce(): B = {
    this.produce(null)
  }

  def produce(r: Response): B = {
    produce()
  }
}

ale to już nie:

class Manager[A, B](produce: A => B) {

  def produce(): B = {
    this.produce(null)
  }

  def produce(r: A): B = {
    produce()
  }
}

podkreśla this.produce(null)

Cannot resolve overloaded method 'produce'

da się to jakoś sprytniej załatwić niż Optionalem tak jak polecają na Stackoverflow?

1

Czemu chcesz tam wstawiać nulla? Nie rób tak w Scali, udawaj, że null w ogóle nie istnieje

0

Zamiast Manager[A, B] możesz dać Manager[A >: Null, B] ale potem i tak jest ambiguity error. Ja bym przerobił kod na jakiś bardziej normalny. W kodzie produkcyjnym w Scali się nulli nie używa (no chyba, że się dostaje z zewnątrz, np z jakiegoś Javowego API, ale wtedy się je jak najszybciej przerabia na Optiony).

0

Chdodzi o to, że ScrapperManager opakowuje Scrapper. Mam różne Scrapper. Standardowo Scrapper.produce() to funkcja 1 argumentowa: Request => Response, ale niektóre Scrapper niepotrzebują Request i są funkcjami 0 argumentowymi: Unit => Response.

0

Jeśli masz taką dziwną konstrukcję która oczekuje wartości typu Unit to możesz ją podać:

val fn: Unit => Int = _ => 5

fn(())

Nie trzeba używać nulla.

Unit => Int to nie jest funkcja 0-argumentowa. () => Int to funkcja 0-argumentowa.

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