2017-09-14 183 views
1

我一直無法確定下面的代碼代表什麼,因爲這些語法沒有完全列在Scala文檔中。有人可以在下面的每一行上說明一些情況嗎?如果上述標題需要更改爲可以使他人受益的內容,請告訴我。Scala編碼風格

val route = 
    path("hello") { 
    get { 
     complete(HttpEntity(ContentTypes.`text/html(UTF-8)`, "<h1>Say hello to akka-http</h1>")) 
    } 
    } 

編號: http://doc.akka.io/docs/akka-http/current/scala/http/introduction.html#http-client-api

+0

你可以作爲對* *什麼語法,你不明白,更精確?這裏有一個變量聲明,兩個字符串文字和4個方法調用。你知道什麼是方法嗎?你知道什麼是方法調用嗎?你知道一個字符串是什麼嗎?你知道文字是什麼嗎?你知道字符串是什麼嗎?你知道變量是什麼嗎? –

+0

Jörg - 我理解Java格式,但上述語法對於如何理解它沒有意義。對於例如是否得到了一個方法,是否被上面定義的人體覆蓋,等價表示如何使其看起來像傳統方式(例如get(){})。

路徑( 「你好」){} 路徑( 「你好」){獲得{}} 路徑( 「你好」){獲得{完整(HttpEntity(,))}}

Kumar

回答

2

這些是call-by-name參數,這些參數在Scala語言規範中的不同點描述。基本上,如果你有這樣的聲明:

def path[R](string: String)(body: => R): R = ... 

,您將需要提供一個字符串和代碼body)塊,這是呼叫按姓名塊。在這種情況下,如果body返回R類型的結果,那麼將推斷返回類型path。因此,該方法可稱爲:

path("hello") { 
    "world" 
} 

直到使用該名稱塊才被調用。

這裏是一個很好的解釋由羅布·諾里斯:https://tpolecat.github.io/2014/06/26/call-by-name.html

2

正如你可能知道,這是在阿卡HTTP路由定義。他們在akka documentation中有很好的描述。這種特殊的路線的工作方式如下:

  • path("hello"){...} - 即驗證路徑
  • get{...}一個指令 - 用於驗證HTTP動詞(方法) 所以它轉換得到一個指令/你好
  • complete(HttpEntity(...))是一個迴應。
+0

感謝從阿卡回答界面視角。 – Kumar