標籤:

提議:在Dotty 中使用縮進語法

我們知道,Haskell,Python,F# 等語言支持通過縮進而不是大括弧或者 start .. end 來劃分代碼塊。對於一部分程序,相比用大括弧來劃分代碼塊而言,使用縮進可能會使得代碼更加整潔。

Scala 之父 Odersky 提出了在 Dotty 中使用類似 F#,Haskell 語言縮進語法的提議。下面是新的語法的一些樣例:

方法定義

def f(x: Int)= n val y = x * x n y+ 1n

模式匹配

xs matchn case x :: xs1 => //...n case Nil => //...n

if ... else 表達式

if condition thenn println("taken")n xnelsen println("not taken")n yn

for 推導式

forn x <- xsn y <- ysnyieldn f(x, y)n

使用 with 關鍵字代替括弧作為類以及對象聲明的開始

object Obj withn class C(x: Int) withn def f = x + 3n def apply(x: Int) = new C(x)n

lambda 表達式中的 with 關鍵字

xs.map with x =>n x + 2nnxs.collect withn case P1 => E1n case P2 => E2n

鏈接:

Consider syntax with significant indentation · Issue #2491 · lampepfl/dotty

Consider syntax with significant indentation by odersky · Pull Request #2488 · lampepfl/dotty

推薦閱讀:

Stack monads in Scala
Scala快速入門-6-單例對象及伴生對象
究竟使用什麼語言去計算?
又是一道入群題(Scala)
Dotty 開發環境搭建

TAG:Dotty | Scala |