Я новичок в Scala, и из того, что я понимаю, выход в Scala не похож на доходность на C#, это больше похоже на выбор.Имеет ли Scala эквивалент выхода C#?
Имеет ли Scala что-то похожее на доходность C#? Выход C# велик, потому что он очень удобен для написания итераторов.
Update: вот пример псевдо-код из C# Я хотел бы быть в состоянии осуществить в 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;
}
}
}
Этот код реализует итерационный ширину первого обхода графа, используя выход, его возвращает итератор, так что абоненты могут пересекать график с помощью обычного цикла, например:
graph.BreadthFirstIterator().foreach(n => Console.WriteLine(n));
в C#, выход просто синтаксический сахар, чтобы сделать его легко писать итератор (IEnumerable<T>
в .Net, аналогичный до Iterable
на Java). Как итератор, его оценивают лениво.
Обновление II: Возможно, я ошибаюсь, но я думаю, что вся точка урожая в C# заключается в том, что вам не нужно писать функцию более высокого порядка. Например. вы можете написать регулярный цикл или использовать метод, например select
/map
/filter
/where
, вместо того, чтобы передавать функцию, которая затем пересекает последовательность.
E.g. 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))
.
Этот вопрос также отвечает в двух других местах: http://stackoverflow.com/questions/2201882/implementing-yield-yield-return-using-scala-continuations http://stackoverflow.com/questions/2137619/scala-analog-to-python-generator Существует также ответ на вопрос, как сделать его совместимым с операторами 'for': http://stackoverflow.com/questions/8934226/continuations-and-for- Понимание-что-несовместимость –