Я новичок в Scala, и из того, что я понимаю, выход в Scala не похож на выход в С#, он больше похож на select.
Есть ли у Scala что-то похожее на С# yield? С# урожай отлично, потому что он очень удобен для написания итераторов.
Обновление: здесь пример псевдокода из С#, который я хотел бы реализовать в Scala:
public class Graph<T> {
   public IEnumerable<T> BreadthFirstIterator() {
      List<T> currentLevel = new List<T>();
      currentLevel.add(_root);
      while ( currentLevel.count > 0 ) {
         List<T> nextLevel = new List<T>();
         foreach( var node in currentLevel ) {
            yield return node;
            nextLevel.addRange( node.Children );
         }
         currentLevel = nextLevel;
      }
   }
}
Этот код реализует итеративную ширину первого обхода графика, используя yield, он возвращает итератор, так что вызывающие могут пересекать график, используя регулярный цикл, например:
graph.BreadthFirstIterator().foreach( n => Console.WriteLine( n ) );
В С# выход - это просто синтаксический сахар, чтобы упростить запись итератора (IEnumerable<T> в .Net, аналогично Iterable в Java). Как итератор, его оценивают лениво.
  Обновление II: Я могу ошибаться здесь, но я думаю, что вся точка урожая в С# заключается в том, что вам не нужно писать функцию более высокого порядка. Например. вы можете написать регулярный цикл или использовать метод, например select/map/filter/where вместо передачи в функции, которая затем будет проходить последовательность.
например. graph.iterator().foreach(n => println(n)) вместо graph.iterator( n => println(n)).
Таким образом вы можете легко их сцепить, например graph.iterator().map(x => x.foo).filter(y => y.bar >= 2).foreach(z => println(z)).
