在像SML,Erlang的語言和他人的布赫,我們可以定義功能,像這樣:是否有任何基本限制阻止Scala實現模式匹配功能?
fun reverse [] = []
| reverse x :: xs = reverse xs @ [x];
我知道我們可以用Scala編寫的模擬像這樣(我知道,還有下面的代碼中的許多缺陷):
def reverse[T](lst: List[T]): List[T] = lst match {
case Nil => Nil
case x :: xs => reverse(xs) ++ List(x)
}
但我不知道,如果我們可以用Scala編寫代碼前,也許脫糖後者。
是否有在未來(我的意思是,真正的基礎 - 例如道路類型推斷在Scala中,或別的什麼工作,除了解析器明顯)正在實施這樣的語法的基本限制?
UPD
這裏是它如何可能看起來像一個片段:
type T
def reverse(Nil: List[T]) = Nil
def reverse(x :: xs: List[T]): List[T] = reverse(xs) ++ List(x)
你不想這樣寫,因爲這是一個相當低效的「反向」。 – Ingo 2013-02-10 22:31:47
@Ingo這僅僅是一個例子(我已經添加了有關代碼健全性的免責聲明),我可以將factorial作爲示例,它會非常高效。或者你的意思是別的嗎? – 2013-02-10 22:33:36
對我來說,兩者看起來差不多,只是Scala需要參數進行類型註釋,這是OOP/Functional交叉繁殖的結果(與SML中的Hindley-Milner相比)。所以我不完全是你想看到的(除了改變Scala的語法,像'def' - >'fun','Nil' - >'[]') – 2013-02-11 09:53:42