2015-05-21 134 views
1

作爲一個新的斯卡拉,有人可以解釋一下the code here玩框架斯卡拉動作

val echo = Action { request => 
    Ok("Got request [" + request + "]") 
} 

所以我得到的,你會創建一個名爲回聲新的價值,從一個動作特點(從我可以收集類似於Java接口)。 request是某種說法,儘管我從未見過這種語法 - 括號和箭頭=>意味着什麼?

我看到我創建了一個Result對象,表示200響應,並且推測返回該響應。但是我從哪裏返回?一個構造函數?

回答

2

首先,新的價值回波從調用函數Action.apply,其中Action是一個對象(單身階,排序的相關靜在Java中)的結果獲取其值。

Action.apply函數顯然需要一個函數作爲它的參數,並按照約定返回一個Action類型的值。

{ request => 
    Ok("Got request [" + request + "]") 
} 

是從某種類型(參數標記request)某些類型(調用的返回到Ok)的功能。

假設您來自Java背景,Java 8 lambda使用非常類似的語法。

+0

動作似乎是一個特質(https://github.com/playframework/playframework/blob/master/framework/src/play/src/main/scala/play/api/mvc/Action.scala)?所以當你編寫'Action [some func]'時,你實際上正在對該函數調用'Action.apply'? – wrongusername

+0

在你鏈接的文件中有'object Action extends ActionBuilder [Request]'和'Trait ActionBuilder [+ R [_]]'有一個'apply'方法,該方法需要'BodyParser'來擴展'Function1'。在Scala中,通常爲特徵和類設置一個「伴隨對象」,這些特徵和類將保存將會進入類中的靜態成員/方法的東西。在這種情況下是工廠方法。在scala中,如果你調用像「foo(stuff)」這樣的對象,它只是「foo.apply(stuff)」的語法糖「 –

+0

啊我明白了,現在有很多意義,謝謝! :) – wrongusername

1

一個Action是一個接受請求併產生結果(響應)的函數。在{}的表達式中,您可以使用函數文字(匿名函數)request => Ok()。因此,request將在=>後的機構內可用。

由於這是Scala,評估表達式的最後一位將是結果;也就是Ok()裏面會被評估,然後你的結果會被生成。