2017-02-11 130 views
0

的Phoenix.Router手冊頁states的擴展:解釋範圍宏

scope(path, options, list) 

定義與給定路徑的範圍。

此功能的快捷方式:在該宏調用

scope path: path do 
    ... 
end 

其中一個參數是options。我認爲該清單是以do開頭並以end結尾的部分。有人可以好好解釋options的擴展位置嗎?

回答

1

是的,這裏的list是一個元素列表,其中[do: block]其中blockdo ... end內的代碼。這裏的文檔不是很清楚,但你可以通過read the source來更好地理解這一點。

總之,path插入options如果選項是一個列表,這樣:

scope(path, options, list) 

相當於

scope([path: path] ++ options, list) 

如果options是一個列表,並且相當於

scope([path: path, alias: options], list) 

if options is a atom(which被視爲範圍的別名)。

原因的說法被命名在文檔list是函數沒有在上面的函數頭聲明,這使得ex_doc推斷的名稱,並選擇使用list因爲函數接受一個列表作爲[do: block]最後一個論點。你可以閱讀更多關於這個here

+0

假設您將'scope'宏引用爲沒有函數頭聲明的函數,那麼這樣的聲明將如何?我無法在您指出的源代碼中找到它。 – raarts

+0

是的,我的意思是'範圍'宏。它看起來像'defmacro scope(path,options,foo)'(不''do ... end'主體)。 – Dogbert