Nowość w skali z klejem AWS. Próbuję zrobić, to uzyskać wartość dla pola na Dynamicrecord, więc mogę użyć tego do dopasowania, a następnie zaktualizuj rekord, a następnie zwróć go.

W poniższym kodem chciałbym najpierw uzyskać wartość pola z tym: rec => rec.getField(col)

Mogę więc przetestować wartość przed rozpoczęciem dopasowania.

Oto, co mam obecnie i działa jak jest.

    def doSomething(col: String): DynamicRecord => DynamicRecord = 
    { 
     
      rec => rec.getField(col) match 
      {
        case Some(s: String) => 
        {
           //do something with s to the record (rec)
        }
        case default => do something with default case to the record (rec)
      }
      rec
    }

Uwaga, ponieważ bezpośrednio wykonuję mecz z rec, a następnie udostępniam go, aby jeszcze zainstalować.

Ale muszę najpierw uzyskać wartość, a następnie dopasować i wreszcie zwrócić zmieniony rekord. Coś podobnego do tego poniżej. Ale ponieważ używam wartości pola dla dopasowania, nie mam już odniesienia do rec wewnątrz obudowy.

    def doSomething(col: String): DynamicRecord => DynamicRecord = 
    { 
      var fldVal: String = ""
      rec => fldVal = rec.getField(col)

      fldVal match 
      {
        case Some(s: String) => 
        {
           //do something to the record with s
        }
        case default => //do something to the record with default case
      }
      rec //need to return record here
    }

Jak mogę uzyskać wartość pola z REC, a następnie wziąć odniesienie do REC, więc mogę to zmienić i zwrócić?

Błędy, które otrzymałem, są, brakujący typ parametru, niedopasowanie typu.

Każda pomoc doceniona.

Dzięki!

0
BjornTuroque 4 październik 2020, 05:16

1 odpowiedź

Najlepsza odpowiedź

Twój opis jest nieco mylący. Wygląda na to, co jesteś, to coś takiego.

def doSomething(col: String): DynamicRecord => DynamicRecord =
  rec => {
    rec.getField(col) match {
      case Some(s: String) =>
        //do something to the record with s
      case default =>
        //do something to the record with default case
    }
    rec //need to return record here
  }

Jeśli tak, mogę polecić następujące uproszczenie.

def doSomething(col: String): DynamicRecord => DynamicRecord =
  rec => rec.getField(col).fold {
    //return rec modified with default case
  } { s =>
    //return rec modified with s
  }
1
jwvh 4 październik 2020, 07:34