in anonynomus functions? А именно интересует как определяется scope образуемой функции.
                  
                  
                  Все, что мне нагуглилось, это эмпирические "правила большого пальца", которые ребята сами для себя придумали. В общем-то этого и хватает, но мне нужно as is, поскольку предстоит с AST Scala поработать. 
                  
                  
                  
                  
                  
                  В спецификации, к сожалению, неполное объяснение:
                  
                  
                  https://www.scala-lang.org/files/archive/spec/2.13/06-expressions.html#placeholder-syntax-for-anonymous-functions
                  
                  
                  
                  
                  
                  Говорится, что это минимально возможное выражение категории "Expr" из синтаксических правил. 
                  
                  
                  Казалось бы на этом и все, однако в некоторых случаях scope расширяется, например
                  
                  
                  
                  
                  
                  if (true) (_:Int) else 42
                  
                  
                  Транслируется в 
                  
                  
                  (x:Int) => if (true) x else 42
                  
                  
                  
                  
                  
                  Хотя по синтаксическому правилу (я чуть упростил)
                  
                  
                  Expr ::=  ‘if’ ‘(’ Expr ‘)’ Expr [‘else’ Expr] | ...
                  
                  
                  Т.е. должно было бы транслироваться в 
                  
                  
                  if (true) (x: Int) => x else 42
                  
                  
                  
                  
                  
                  На форумах пишут, что здесь desugaring AST происходит до типизации, поэтому на типы вроде как можно не смотреть.
                  
                  
                  
                  
                  
                  По-видимому просто синтаксические правила не столь подробны, сколь они есть на самом деле.
                  
                  
                  Остается только в код компилятора лезть, но вдруг тут кто уже с этим сталкивался c:
                  
                  
                
Минимально возможное, большее, чем x => x
Обсуждают сегодня