2013-07-30 71 views
0

問題,所以這Opa事情正在醞釀。
即時通訊開始這樣的服務器:Opalang和與Server.start()參數

function resource request_dispatch(Uri.relative p_url, 
             p_log_fun) { 
      //type Uri.relative = {list(string) path, list((string,string)) query } 
      match (p_url) { 
       case {path: [] ... }    : get_standard_page(p_log_fun); 
       case {path: ["_rest_" | path] ...}: api_request_handler(path,p_log_fun); 
       case {~path ...}     : Resource.page("Regular",<div>standard page</div>); 
      } 
     }  
function start_server(p_log_fun) { 
      function resource dispatch_handler_fun(Uri.relative p_url) { 
       request_dispatch(p_url,p_log_fun) 
      } 
      Server.start(Server.http, 
         { title : "Hello, world", 
          dispatch:dispatch_handler_fun}) 
     } 

然而即時得到:

Error: File "src/posts_viewer.opa", line 71, characters 3-150, (71:3-74:42 | 2466-2613)
Type Conflict
(72:10-74:41) {dispatch: (Uri.relative -> resource); title: string } /
'c.a
(71:3-71:8) Server.handler
The second argument of function should be of type
{ dispatch: (Uri.relative -> resource); title: string }/ 'c.a
instead of
Server.handler

所以它顯然dispatch_handler_fun是正確的類型簽名不是。 API文檔,我可以看到Server.handler在一變 http://doc.opalang.org/type/stdlib.core.web.server/Server/handler

是明確向任何人爲什麼dispatch_handler_fun是不恰當的嗎?
ps。比較遺憾的是糟糕的代碼格式化:)

謝謝

回答

2

中有變量類型Server.handler,只有{string title, (→ xhtml) page}{ (Uri.relative → resource) dispatch }(無標題字段)沒有{title, dispatch}

原因標題連接到page而不是dispatchpage僅返回xhtml沒有HTML標頭的正文。服務器需要一些額外的數據作爲頁面的標題。您使用的dispatch函數會返回附加了一些額外數據的資源,並且不需要將其提交給服務器兩次。在您的示例中,您已經使用了函數Resource.page(),該函數將標題作爲第一個參數。

+0

感謝您的詳細解答。 :) - 「你使用的分派函數返回附加了一些額外數據的資源,並且不需要兩次給服務器。」 - 你會推薦我在這裏使用什麼?因爲'dispatch'預計是類型「(Uri.relative - > resource)」(即函數應該返回一個資源,就像我的函數一樣)。 – deepblue

+0

所以我從Server.start()中刪除了'title'成員,因爲你建議由dispatch_handler_fun()創建的資源有自己的標題。現在應用程序編譯時沒有類型錯誤:) – deepblue

相關問題