Scala Pętla for z ciałem i yield

0

Cześć :)
Uczę się scali, bawiłem się forem z yield i napisałem taki fragment kodu

val numList2 = List(1, 2, 3, 4, 5, 6, 7, 8, 9, 10)
val x = for(g <- numList2 if g % 3 == 0) yield g {
    println("Something")
}

println(s"\nx = $x")

IntelliJ nie pokazuje żadnego problemu ale podczas kompilacji wywala:
Error:(21, 58) Int does not take parameters val x = for(g <- numList2 if g % 3 == 0) yield g {

Nie da się zrobić pętli która zwróci wyniki i jednocześnie będzie coś robić wewnątrz? Czy może to trzeba inaczej zrobić?

0

Jak pokazuje: https://stackoverflow.com/questions/9796939/scala-yield-syntax
oraz to: https://docs.scala-lang.org/tutorials/FAQ/yield.html
"In Scala, yield is part of for comprehensions – a generalization of Ruby and Python’s list-comprehensions." - czyli za bardzo nie ma sensu blok za yield.

0

Nie do końca nie ma sensu.

Blok za yield może być stosowany i nie ma w tym nic złego. W przypadku z pierwszego posta nie ma sensu ponieważ jest to odczytywane przez kompilator jakbyś próbował do g, który jest Int'em przekazać parametr jak do funkcji. To co chcesz osiągnąć można (zapewne, zależy co chcesz kiedy printować) zrobić na przykład tak:

val numList2 = List(1, 2, 3, 4, 5, 6, 7, 8, 9, 10)
val x = for(g <- numList2 if g % 3 == 0) yield {
    println("Something")
    g
}

println(s"\nx = $x")

lub:

  val numList2 = List(1, 2, 3, 4, 5, 6, 7, 8, 9, 10)
  val x = for {
    g <- numList2
    if g % 3 == 0
    _ = println("Something")
  } yield g
  println(s"\nx = $x")

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