Я читал описание инструмента Scala WartRemover и был сбит с толку одним из их пунктов. В описании сказано следующее:
return
нарушает ссылочную прозрачность. Выполните рефакторинг для безопасного завершения вычислений.// Won't compile: return is disabled def foo(n:Int): Int = return n + 1 def foo(ns: List[Int]): Any = ns.map(n => return n + 1)
Для меня это не имеет никакого смысла, и оба примера выглядят ссылочно прозрачными. Есть ли способ, которым ключевое слово return
повышает вероятность нарушения функцией ссылочной прозрачности? Я просто совершенно не понимаю их точку зрения?
return
предназначено для предотвращения использования, такого какdef f(x : Int):Int = ((w : Nothing) => 3) (return x)
(это функция идентификации, а не константа3
). Хотя я могу согласиться с запретомreturn
(есть ли вообще причина для его использования в чистом коде?), Я бы не сказал, что ранний возврат нарушает ссылочную прозрачность, поскольку вы можете достичь того же эффекта, используя преобразование с продолжением передачи. - person chi   schedule 06.01.2015return
с чистотойfoo
. - person chi   schedule 07.01.2015